home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / boss / boss_doc.lzh / BOSS.MAN next >
Text File  |  1992-03-08  |  330KB  |  10,914 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.                                  The Window BOSS
  13.                                         &
  14.                                    Data Clerk
  15.  
  16.  
  17.                                 Revision 03.15.92
  18.                                   Version 7.01
  19.  
  20.  
  21.  
  22.  
  23.                          Star Guidance Consulting, Inc.
  24.                                  273 Windy Drive
  25.                           Waterbury, Connecticut 06705
  26.  
  27.                                  (203) 574-2449
  28.  
  29.  
  30.  
  31.  
  32.                                _______
  33.                           ____|__     |               (tm)
  34.                        --|       |    |-------------------
  35.                          |   ____|__  |  Association of
  36.                          |  |       |_|  Shareware
  37.                          |__|   o   |    Professionals
  38.                        -----|   |   |---------------------
  39.                             |___|___|    MEMBER
  40.  
  41.  
  42.  
  43.  
  44.  
  45.                 Copyright (c) 1984-1991 by Philip A. Mongelluzzo
  46.                                All Rights Reserved.
  47.  
  48.  
  49.  
  50.  
  51.  
  52.         The Window BOSS Shareware diskette,  containing a copy of this 
  53.         manual  may  be freely copied and shared,  but printed copies  of 
  54.         this document may not be copied in any way without permission  in 
  55.         writing from Star Guidance Consulting.  Thank you.  
  56.                                                      The Window BOSS
  57.  
  58.  
  59.  
  60.         1. Introduction
  61.  
  62.         The Window BOSS is one of the most powerful and cost-effective 
  63.         products available to enhance and accelerate the development of 
  64.         system and applications programs in the "C" language.  The BOSS 
  65.         will let you create programs that have the same look and feel as 
  66.         top sellers like Lotus 1-2-3, Sidekick, dBASE III, and Framework!  
  67.         Pop-up windows, pull down menus, status lines, and in context on-
  68.         line help functions can be easily implemented.  Your applications 
  69.         can drag windows around the screen and automatically sense the 
  70.         video card installed.  All of this without snow, flicker, or 
  71.         delay! 
  72.  
  73.         The BOSS's assistant, The Data Clerk is always on call to handle 
  74.         the tasks associated with data entry.  Whether they be as simple 
  75.         as fetching a line of text or as complicated as the coordination 
  76.         of filling out a form, the Data Clerk will be there to assist, 
  77.         and if necessary, validate precious information as it is entered.
  78.  
  79.         Registered users can take advantage of our "Source Plus" policy 
  80.         that provides meticulously commented source code, technical 
  81.         support, and minimal fee updates.
  82.  
  83.         2. Technical Nitty Gritties
  84.  
  85.         The Window BOSS supports PC/MSDOS for the IBM PC/XT/AT, PS/2 and 
  86.         compatibles.   However, you'll need one of the following 
  87.         compilers in order to take advantage of the state-of-the-art 
  88.         techniques available from the BOSS:
  89.  
  90.                               TopSpeed C, Zortech C
  91.                          Borland C++, Turbo C++, Turbo C
  92.                         Lattice C, Watcom C,  Mix Power C
  93.                     Microsoft C, Quick C, Quick C for Windows
  94.  
  95.         The BOSS is written in "C" and assembly language.  You'll need 
  96.         the Microsoft Assembler, MASM, to assemble any local changes to 
  97.         the assembler source.
  98.  
  99.           Stats:
  100.  
  101.              Maximum windows:    limited only by compiler and memory
  102.              Maximum window:     full screen (25x80, 43x80, 50x80)
  103.              Minimum window:     1 row 1 column (borderless)
  104.                                  3 rows 3 columns (framed)
  105.              Minimum fields:     none
  106.              Maximum fields:     limited only by compiler and memory
  107.  
  108.           Operation:
  109.  
  110.              Simply include the library at link time and invoke the 
  111.              function desired.  
  112.  
  113.  
  114.  
  115.  
  116.                                                            Page: 1
  117.                                                      The Window BOSS
  118.  
  119.  
  120.  
  121.         3. User Supported Software
  122.  
  123.         Star Guidance Consulting distributes The Window BOSS with a 
  124.         unique marketing approach called Shareware.  The Shareware 
  125.         diskette and its programs and manual may be freely copied and 
  126.         shared.  It is also available from Star Guidance for $20.00. We 
  127.         ask you to help us distribute The Window BOSS by sharing 
  128.         unmodified copies of the Shareware diskette with others.  We also 
  129.         encourage you to register your copy for $55.00.  You'll find a 
  130.         registration form at the end of this manual.  Thank you for your 
  131.         support and enjoy the BOSS.  
  132.  
  133.         3.1. Registering
  134.  
  135.         Shareware is a term for software that can be freely copied and 
  136.         shared.  The term describes copyrighted software which the author 
  137.         supports and encourages people to copy and share.
  138.  
  139.         Shareware is like public television:  the programming is freely 
  140.         distributed, but support from users is encouraged.  The concept 
  141.         is based on these principles:
  142.  
  143.           1. People need to try programs to see if they are useful.
  144.           2. Software authors can be supported directly by users.
  145.           3. Copying and networking of programs can be encouraged.
  146.  
  147.         We encourage you to register your copy of The Window BOSS for 
  148.         $55.00.  Registration has a number of benefits to you:
  149.  
  150.           1. Serialized diskette containing all source code for all 
  151.              supported compilers.
  152.           2. Telephone Support and minimal fee updates. Minimal fees 
  153.              cover the cost of media, packaging materials, shipping, 
  154.              handling, and update preparation.
  155.           3. Thanks from us for your support and encouragement!
  156.  
  157.         3.2. Support Services
  158.  
  159.         You may call, write, or use one of the supported commercial 
  160.         services (CompuServe, GENIE, BIX) to obtain support and 
  161.         assistance. Unless the problem is relatively complex, you will 
  162.         get the best results by calling. Electronic mailboxes are checked 
  163.         on daily basis (excluding weekends & holidays) and are a very 
  164.         effective way of communicating. Electronic mailboxes are great 
  165.         for passing problem code samples and receiving work-arounds 
  166.         and/or problem specific updates. If you write, please include a 
  167.         phone number and the times when you will be available. Our 
  168.         response to written questions is much slower, but we do give 
  169.         priority to overseas users. We are available between 9AM and 5PM 
  170.         Monday through Friday, and sometimes on Saturday and Sunday.
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.                                                            Page: 2
  178.                                                      The Window BOSS
  179.  
  180.  
  181.  
  182.         Support Services - continued.
  183.  
  184.  
  185.  
  186.         With reference to calls, if we do not call back, please remember 
  187.         that about 50% of our call backs do not get completed because of 
  188.         faulty phone numbers, unanswered, or busy phones. If we have not 
  189.         called back within 1 business day, call us again.  Frequent, 
  190.         difficult to reach, or foreign callers can expect "person to 
  191.         person" collect return calls.
  192.  
  193.         3.2.1. Electronic Support
  194.  
  195.         Electronic support is provided on GENIE, CompuServe, and BIX.
  196.         Support previously provided by our BBS is now provided on these 
  197.         services.  You are strongly advised to obtain a USER ID on at 
  198.         least one of these fine services as no other form of electronic 
  199.         support can be provided.
  200.  
  201.         On GENIE, a special topic on the IBM PC Round Table Bulletin 
  202.         Board has been set up to provide support to Window BOSS users.  
  203.         The Window BOSS topic can be found in the "On-Line Product 
  204.         Support" category of the Bulletin Board.  As of this writing, 
  205.         the IBM PC Round Table main menu is page 615 and the "On-Line 
  206.         Product Support" category is category # 30 of the Round Table's 
  207.         Bulletin Board.  Simply move to page 615 by typing "M 615", 
  208.         select the IBM PC Round Table Bulletin Board from the menu by 
  209.         typing "1", then SET the category by typing "SET 30".  Reading 
  210.         and entering messages is straight forward. The on-line help 
  211.         system and GENIE's user guide should assist you if you have 
  212.         questions.  If you prefer, you can leave mail addressed to 
  213.         MONGELLUZZO.  Round Table and Mail messages are answered on a 
  214.         daily basis.  If you need information on obtaining a GENIE 
  215.         account  you can call GENIE toll free at 800-638-9636.
  216.  
  217.         CompuServe electronic correspondence is limited to EMAIL.  Our 
  218.         EMAIL ID is [71565,1001].  SIG(s) are also occasionally checked 
  219.         for messages but should not be considered a vehicle for effective 
  220.         communication to Star Guidance.  If you are a CompuServe user and 
  221.         you need to reach us, use EMAIL.  EMAIL messages are answered on 
  222.         a daily basis.  If you need information on obtaining a CompuServe 
  223.         account you can call CompuServe toll free at 800-848-8199.
  224.  
  225.         BIX electronic correspondence is limited to Electronic Mail.  Our 
  226.         BIX NAME is "pmongelluzzo". The conference areas in the 
  227.         "ibm.exchange" are also occasionally checked for messages but 
  228.         should not be considered a vehicle for effective communication to 
  229.         Star Guidance.  If you are a BIX user and you need to reach us, 
  230.         use EMAIL.  EMAIL messages are answered on a daily basis.  If you 
  231.         need information on BIX can reach them at 800-227-2983 (in 
  232.         New Hampshire and outside the United States call 603-924-2983).
  233.  
  234.  
  235.  
  236.  
  237.  
  238.                                                            Page: 3
  239.                                                      The Window BOSS
  240.  
  241.  
  242.  
  243.         4. The Basics
  244.  
  245.         The Window BOSS is an extensive library of C functions for the 
  246.         creation, the management and the manipulation of text windows.  
  247.         We take care of all the housekeeping and let you, the programmer, 
  248.         get on with developing your application with a minimum of fuss.
  249.  
  250.         Both The Window BOSS and The Data Clerk are based on a layered 
  251.         software design in which powerful, easy to use functions are 
  252.         created from a series of lower level primitives.  As a 
  253.         programmer, you will quickly appreciate our clean and uncluttered 
  254.         approach to getting the job done.
  255.  
  256.         Windows are created and defined by opening them. Once created, 
  257.         you can write to them, move them around, change their attributes, 
  258.         use them as the basis for data entry, or "kill" them by closing 
  259.         them.  Windows are nothing more than a sub display of a larger 
  260.         display - the physical screen.  They are defined to have size, 
  261.         location, and attributes like foreground color, background color, 
  262.         border colors and so on.  The BOSS includes a whole host of 
  263.         functions for defining and manipulating your windows.
  264.  
  265.         Windows can also serve as the backdrop for data entry.  Once a 
  266.         window is created, you can use it to convey information or to 
  267.         retrieve it!  The Data Clerk will assist you in obtaining the 
  268.         desired goal, whether it be as simple as a single line of text or 
  269.         as complex as a complete form. 
  270.  
  271.         Forms are an ordered collection of input requests (fields) that 
  272.         occur within a specific window.  Fields have size, location 
  273.         (relative to the window which they will be displayed in), and 
  274.         attributes (foreground color, background color, mask values, fill 
  275.         characters, type [integer, float, long, text], validation 
  276.         ranges and so on).  Like windows, forms are created by opening 
  277.         them.  Their contents must then be defined by using the field 
  278.         definition functions provided, or with your own custom field 
  279.         definition functions.  Once created and defined, a form becomes 
  280.         part of the window and moves with it. Forms are "killed" by 
  281.         closing them (n.b. killing a form has no effect on the window to 
  282.         which it was anchored or to the information displayed in it, form 
  283.         or otherwise). The same functions used to input single data items 
  284.         are used to build forms.  This consistency, coupled with an 
  285.         uncluttered approach and flexibility, gives The Window BOSS its 
  286.         power.    
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.                                                            Page: 4
  300.                                                      The Window BOSS
  301.  
  302.  
  303.  
  304.         4.1. Window Basics
  305.  
  306.         Here is the famous "hello" program!  As you can see it's pretty 
  307.         simple to get windows into your applications with The Window 
  308.         BOSS!!  You should review this code in conjunction with the 
  309.         function descriptions found in this manual and the concepts 
  310.         outlined in the Important Concepts section following the 
  311.         examples.
  312.  
  313.         #include "winboss.h"            /* REQUIRED */
  314.         main()
  315.         {
  316.         WINDOWPTR w1;                   /* window handle */
  317.         int batrib;                     /* border atrib */
  318.         int watrib;                     /* window atrib */
  319.  
  320.         /*
  321.          * Set attributes:
  322.          *
  323.          *      border - blue/white box
  324.          *      window - white background/black letters
  325.          *
  326.         */
  327.  
  328.           batrib = (BLUE << 4) | WHITE; /* border atrib */
  329.           watrib = (WHITE <<4) | BLACK; /* window atrib */
  330.  
  331.         /*
  332.          * Open window at 0,0 - 25 cells wide and 10 cells high
  333.         */
  334.  
  335.           w1 = wn_open(0,0,0,25,10,watrib,batrib);
  336.           if(!w1) exit();       
  337.  
  338.         /*
  339.          * Print the famous string and wait for key to be struck.
  340.          * Close window on key strike.. exit.
  341.         */
  342.  
  343.           wn_printf(w1,"Hello World...");
  344.           v_getch();                    /* wait for key */
  345.           wn_close(w1);                 /* close the window */
  346.           exit(0);                      /* and exit */
  347.         }
  348.  
  349.         /* End */
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.                                                            Page: 5
  361.                                                      The Window BOSS
  362.  
  363.  
  364.  
  365.         4.2. Data Entry Basics
  366.  
  367.         Lets expand our "hello" program to prompt and fetch a name.
  368.  
  369.         #include "winboss.h"            /* REQUIRED */
  370.         main()
  371.         {
  372.         WINDOWPTR w1;                   /* window handle */
  373.         int batrib;                     /* border atrib */
  374.         int watrib;                     /* window atrib */
  375.         char name[15];                  /* name */
  376.  
  377.         /*
  378.          * Set attributes:
  379.          *
  380.          *      border - blue/white box
  381.          *      window - white background/black letters
  382.          *
  383.         */
  384.  
  385.           batrib = (BLUE << 4) | WHITE; /* border atrib */
  386.           watrib = (WHITE <<4) | BLACK; /* window atrib */
  387.  
  388.         /*
  389.          * Open window at 0,0 - 25 cells wide and 10 cells high
  390.         */
  391.  
  392.           w1 = wn_open(0,0,0,25,10,watrib,batrib);
  393.           if(!w1) exit();       
  394.  
  395.         /*
  396.          * Print the famous string, prompt and fetch a name, 
  397.          * wait for key to be struck.
  398.          * Close window on key strike.. exit.
  399.         */
  400.  
  401.           wn_printf(w1,"Hello World...");
  402.  
  403.           *name = NUL;                  /* init buffer for name */
  404.           wn_gtext(XEQ,NFRM,NFLD,w1,2,1,"Name: ",watrib,'_',15,name,NSTR,NSTR);
  405.  
  406.           v_getch();                    /* wait for key */
  407.           wn_close(w1);                 /* close the window */
  408.           exit(0);                      /* and exit */
  409.         }
  410.  
  411.         /* End */
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.                                                            Page: 6
  422.                                                      The Window BOSS
  423.  
  424.  
  425.  
  426.         4.3. Form Basics
  427.  
  428.         Now we will expand a bit further to read a 2 field form.
  429.  
  430.         #include "winboss.h"            /* REQUIRED */
  431.         main()
  432.         {
  433.         WINDOWPTR w1;                   /* window handle */
  434.         WIFORM f1;                      /* form handle */
  435.         int batrib;                     /* border atrib */
  436.         int watrib;                     /* window atrib */
  437.         char name[15];                  /* name */
  438.         char city[15];                  /* city */
  439.  
  440.         /*
  441.          * Set attributes:
  442.          *
  443.          *      border - blue/white box
  444.          *      window - white background/black letters
  445.          *
  446.         */
  447.  
  448.           batrib = (BLUE << 4) | WHITE; /* border atrib */
  449.           watrib = (WHITE <<4) | BLACK; /* window atrib */
  450.  
  451.         /*
  452.          * Open window at 0,0 - 25 cells wide and 10 cells high
  453.         */
  454.  
  455.           w1 = wn_open(0,0,0,25,10,watrib,batrib);
  456.           if(!w1) exit();       
  457.  
  458.         /*
  459.          * Print the famous string, create, define, and fetch form
  460.          * wait for key to be struck.
  461.          * Close window on key strike.. exit.
  462.         */
  463.  
  464.           wn_printf(w1,"Hello World...");
  465.  
  466.           *name = NUL;                  /* init buffer for name */
  467.           *city = NUL;                  /* init buffer for city */
  468.           f1 = wn_frmopn(3);            /* open form 2 + 1 Fields */
  469.           wn_gtext(SET,f1,0,w1,2,1,"Name: ",watrib,'_',15,name,NSTR,NSTR);
  470.           wn_gtext(SET,f1,1,w1,3,1,"City: ",watrib,'_',15,city,NSTR,NSTR);
  471.           wn_frmget(f1);                /* read the form */
  472.  
  473.           v_getch();                    /* wait for key */
  474.           wn_frmcls(f1);                /* first close the form */
  475.           wn_close(w1);                 /* then close the window */
  476.           exit(0);                      /* and exit */
  477.         }
  478.  
  479.  
  480.  
  481.  
  482.                                                            Page: 7
  483.                                                      The Window BOSS
  484.  
  485.  
  486.  
  487.         4.4. Popup Menu Basics
  488.  
  489.         Popup and pulldown menus add that extra sparkle to your 
  490.         applications.  The Window BOSS includes a simple popup menu 
  491.         system that is fast and easy to use.  The system consists of two 
  492.         functions; wn_popup() and wn_qpopup().  wn_popup() is an 
  493.         interactive version of wn_qpopup().  That is to say that 
  494.         wn_popup() can be used to solicit user input while wn_qpopup is a 
  495.         *information only* popup.  The "q" in qpopup stands for 'quick'.  
  496.         Both functions have function parameters and require the menu 
  497.         structure "pmenu" to be initialized.  "pmenu" is defined in 
  498.         "winboss.h".
  499.  
  500.         Popup menus, like windows, have size (height & width), an origin 
  501.         (row & column), and attributes (text & border).  These are passed 
  502.         as parameters to both wn_popup and wn_qpopup in the same fashion 
  503.         as they would be for a call to wn_open.  In addition to the 
  504.         normal window stuff, popup menus also have information that needs 
  505.         to be displayed and, in some cases, information that needs to be 
  506.         returned, to the calling function.  This additional information 
  507.         is passed to popup via the pmenu structure.  The pmenu structure 
  508.         allows us to tell wn_popup what text is to be displayed where, 
  509.         and what value (return code), if any, is to be provided back to 
  510.         the calling function.
  511.  
  512.         Both wn_popup and wn_qpopup call wn_open to open a window defined 
  513.         by the calling parameters. Calls to wn_putsa are then made to 
  514.         display the text defined in pmenu within the window just opened 
  515.         at the location in the window specified by the values defined in 
  516.         pmenu.  A menu item is highlighted by moving either the cursor 
  517.         keys, space bar, or by pressing the first character of the menu 
  518.         item desired.  Control is passed back to the calling function 
  519.         when the 'Enter' or 'Escape' key is pressed. Here is a typical 
  520.         call to wn_popup:
  521.  
  522.             wat = (WHITE<<4|BLACK);
  523.             bat = (BLUE<<4|WHITE); 
  524.             rv = wn_popup(0, 0, 0, 33, 14, wat, bat, &intelc, FALSE);
  525.                           |                       |  |     |  |   |
  526.                           +-------\/--------------+  |     |  |   |
  527.                              Normal wn_open parms    |     |  |   |
  528.                                                      |     |  |   |
  529.                                   pmenu structure  <-+-----+  |   |
  530.                                                               |   |
  531.                                         window close flag   <-+---+
  532.  
  533.         The normal wn_open parameters define the popup menu's location, 
  534.         size, and color.  The pmenu structure address allows wn_popup and 
  535.         wn_qpopup to access the contents of the intelc pmenu structure.  
  536.         The window close flag is used to tell wn_popup whether or not to 
  537.         close the popup menu when returning to the calling function. 
  538.         Telling wn_popup not to close the menu when returning to the 
  539.         calling function allows you to create nested popups.
  540.  
  541.  
  542.  
  543.                                                            Page: 8
  544.                                                      The Window BOSS
  545.  
  546.  
  547.  
  548.         Popup Menu Basics - continued.
  549.  
  550.  
  551.  
  552.         Lets examine the pmenu structure definition from winboss.h:
  553.  
  554.           struct mitem {              /* POPUP menu item template */
  555.             int r;                    /* row */
  556.             int c;                    /* col */
  557.             char *t;                  /* text */
  558.             int rv;                   /* return value */
  559.           };
  560.  
  561.           struct pmenu {              /* POPUP menu structure */
  562.             WINDOWPTR wpsave;         /* place to hold window id */
  563.             int winopn;               /* leave window open flag */
  564.             int lndx;                 /* last index */
  565.             int fm;                   /* first menu item index */
  566.             int lm;                   /* last menu item index */
  567.             struct mitem scrn[WN_MXROWS*4]; /* a bunch of menu items */
  568.           };                          /* NOTE RELATIVE LIMIT */
  569.  
  570.           mitem - Popup menus contain a number of menu items. Each menu 
  571.           item has a location (within the window), text (to be displayed 
  572.           in the window), and an integer return code that is passed back 
  573.           to the calling function to let the caller know which menu item 
  574.           was selected.  "r" and "c" define the row and column, "t" is a 
  575.           pointer to the text, and rv is integer return code.
  576.              
  577.           pmenu - In addition to the information needed about each menu 
  578.           item, we need to do some internal housekeeping on the popup 
  579.           menu itself.  "wpsave" is used to store the WINDOWPTR that was 
  580.           returned from the call to wn_open made by popup. "winopn" is 
  581.           used internally by popup as an indicator of whether or not the 
  582.           window referenced by wpsave is currently open.  "lndx" is used 
  583.           internally to hold the index of the menu item last referenced 
  584.           or selected.  The combination of "wpsave", "winopn", and "lndx" 
  585.           provide wn_popup with the ability to correctly handle both 
  586.           nested and non-nested popups.  The structure members "wpsave", 
  587.           "winopn", "lndx" should not be modified, only initialized. 
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.  
  604.                                                            Page: 9
  605.                                                      The Window BOSS
  606.  
  607.  
  608.  
  609.         Popup Menu Basics - continued.
  610.  
  611.  
  612.  
  613.           The Window BOSS's popup menus allow you to have informational 
  614.           headers and trailers.  This is handy for providing multiple 
  615.           line titles and or trailing instructional messages.  Consider 
  616.           the following:
  617.  
  618.              +---------------------------------+
  619.              |                                 |
  620.              |           Intellicom            |   <- Informational
  621.              |          Quick - Help           |   <- Informational
  622.              |                                 |
  623.              |     1 General Information       |   <- Action item
  624.              |     2 Terminal Mode Options     |   <- Action item
  625.              |     3 XMODEM File Send          |   <- Action item
  626.              |     4 XMODEM File Receive       |   <- Action item
  627.              |     5 CompuServe Exec Mode      |   <- Action item  
  628.              |                                 |
  629.              |  Press: ESC to quit or Cursor   |   <- Informational
  630.              |   Keys to Position Cursor then  |   <- Informational 
  631.              |   press RETURN for MORE info.   |   <- Informational
  632.              |                                 |
  633.              +---------------------------------+
  634.  
  635.           In the above popup there are 10 menu items, 5 are action 
  636.           oriented, and 5 are informational.  They are numbered 0 through 
  637.           9 and correspond to the "scrn" array of pointers in the pmenu 
  638.           structure. "fm" and "lm" are the indexes of the first and last 
  639.           action items in scrn array.  In the case of the above popup, fm 
  640.           and lm would be initialized to 2 and 6 respectively. "fm" and 
  641.           "lm", like the other housekeeping structure members, should not 
  642.           be modified, only initialized.  The pmenu structure for this 
  643.           popup is as follows: 
  644.  
  645.           static struct pmenu intelc = {
  646.             0, FALSE, 0,                     /* wpsave, winopn, lndx */
  647.              2, 6, {                         /* fm, lm */
  648.              1, 2, "         Intellicom", 0,            /** ----- **/
  649.              2, 2, "        Quick - Help", 0,           /*    |    */ 
  650.              4, 5, "1 General Information  ", 1,        /*    |    */
  651.              5, 5, "2 Terminal Mode Options", 2,        /*    |    */
  652.              6, 5, "3 XMODEM File Send     ", 3,        /* 10 menu */
  653.              7, 5, "4 XMODEM File Receive  ", 4,        /*  items  */
  654.              8, 5, "5 CompuServe Exec Mode ", 5,        /*         */
  655.             10, 2, "Press: ESC to quit or Cursor", 0,   /*         */
  656.             11, 2, " Keys to Position Cursor then", 0,  /*         */
  657.             12, 2, " press RETURN for MORE info.", 0,   /** ----- **/
  658.             99, 99, "",99 }                 /* ALWAYS ADD THIS LINE */
  659.           };
  660.           
  661.  
  662.  
  663.  
  664.  
  665.                                                            Page: 10
  666.                                                      The Window BOSS
  667.  
  668.  
  669.  
  670.         Popup Menu Basics - continued.
  671.  
  672.  
  673.  
  674.         The end of the pmenu structure is designated by defining a menu 
  675.         item at row 99, column 99, with null text, with a return code of 
  676.         99.  THIS MUST ALWAYS BE DONE!
  677.  
  678.           Example:
  679.              
  680.              #include "winboss.h"
  681.  
  682.              static struct pmenu intelc = {
  683.                0, FALSE, 0,
  684.                2, 6, {
  685.                1, 2, "         Intellicom", 0,
  686.                2, 2, "        Quick - Help", 0,
  687.                4, 5, "1 General Information  ", 1,
  688.                5, 5, "2 Terminal Mode Options", 2,
  689.                6, 5, "3 XMODEM File Send     ", 3,
  690.                7, 5, "4 XMODEM File Receive  ", 4,
  691.                8, 5, "5 CompuServe Exec Mode ", 5,
  692.               10, 2, "Press: ESC to quit or Cursor", 0,
  693.               11, 2, " Keys to Position Cursor then", 0,
  694.               12, 2, " press RETURN for MORE info.", 0,
  695.               99, 99, "",99 }
  696.              };
  697.             
  698.              main()
  699.              {
  700.              WINDOWPTR w1;
  701.              int wat, bat, rv;
  702.  
  703.                wn_init();
  704.                w1 = wn_open(0,11,1,31,2,NORMAL,NORMAL);
  705.                if(!w1) exit(1);
  706.                wat = (WHITE<<4|BLACK);
  707.                bat = (BLUE<<4|WHITE); 
  708.                rv = wn_popup(0, 0, 0, 33, 14, wat, bat, &intelc, FALSE);
  709.                wn_printf(w1, "wn_popup returned: %d\n",rv);
  710.                wn_printf(w1, "Press any key to continue..");
  711.                v_getch();
  712.                wn_close(w1);
  713.                wn_exit();
  714.                exit(0);
  715.              }
  716.              /* End */
  717.  
  718.           To make the popup menu disappear upon return, change the call 
  719.           to wn_popup to be:
  720.  
  721.                rv = wn_popup(0, 0, 0, 33, 14, wat, bat, &intelc, TRUE);
  722.  
  723.  
  724.  
  725.  
  726.                                                            Page: 11
  727.                                                      The Window BOSS
  728.  
  729.  
  730.  
  731.         Popup Menu Basics - continued.
  732.  
  733.  
  734.  
  735.         The calling sequence and setup of wn_qpopup is similar to 
  736.         wn_popup but the functions significantly differ operationally.  
  737.         The parameter list differs in that there is no window close flag 
  738.         parameter.  The operational differences are more significant. 
  739.         wn_qpopup places the popup window on the screen and then 
  740.         immediately returns a WINDOWPTR to the open and active popup 
  741.         window.  The calling function assumes full responsibility for  
  742.         the window from then on (i.e. moving, closing, etc.).
  743.  
  744.         Quick popups are used to display information only and do not 
  745.         contain action menu items.  
  746.  
  747.         Example:
  748.  
  749.              #include "winboss.h"
  750.  
  751.              static struct pmenu m1 = {
  752.                0, FALSE, 0,
  753.                0, 0, {
  754.                1, 2, "Presenting", 0,
  755.                99, 99, "",99 }
  756.              };
  757.  
  758.              main()
  759.              {
  760.              int wat, bat;
  761.              WINDOWPTR w2;
  762.  
  763.                wat = (WHITE<<4|BLACK);
  764.                bat = (BLUE<<4|WHITE);
  765.                w2 = wn_qpopup(0,0,0,16,3,wat,bat,&m1);
  766.                v_getch();
  767.                wn_close(w2);
  768.                wn_exit();
  769.                exit();
  770.              }
  771.              /* End */
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.                                                            Page: 12
  788.                                                      The Window BOSS
  789.  
  790.  
  791.  
  792.         Popup Menu Basics - continued.
  793.  
  794.  
  795.  
  796.         4.4.1. Notes
  797.  
  798.         Popup menu items are highlighted by moving the cursor bar with 
  799.         the arrow keys, space bar, or by pressing the first letter/digit 
  800.         of the menu item.  wn_popup will return as soon as the Enter or 
  801.         Escape key is struck.  The return code specified in the pmenu 
  802.         structure is returned when the Enter key is pressed, Escape 
  803.         causes return code of 99 to be passed back to the calling 
  804.         function. 
  805.  
  806.         Menu navigation is from the current to next or current to 
  807.         previous menu item when using the cursor keys or space bar.  Item 
  808.         skipping can only be accomplished by using the "first character" 
  809.         selection method.  Skip selection will only work as anticipated, 
  810.         if the first character of each action menu item is unique.
  811.  
  812.         Source code is provided (WN_HELP.C) to allow you to customize 
  813.         and/or enhance the popup menu system to meet your needs.
  814.  
  815.         The BOSSDEMO program contains coding samples showing the use of 
  816.         wn_popup, wn_qpopup, and how to implement pulldown menus using 
  817.         wn_popup.
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.                                                            Page: 13
  849.                                                      The Window BOSS
  850.  
  851.  
  852.  
  853.         4.5. Help System Basics
  854.  
  855.         The Window BOSS includes a file based help system that can be 
  856.         used to provide your applications with "context sensitive" help.  
  857.  
  858.         It would be helpful for you to print out a few pages of 
  859.         "INTELC.HLP" to refer to during the following discussion.  You 
  860.         should also run the BOSSDEMO program and exercise the Intellicom 
  861.         Quick Help popup menu. This code uses the help system to produce 
  862.         the displays when menu selections are made.
  863.  
  864.         The system uses plain ASCII text files you create with your 
  865.         favorite editor.  A special, but easy to follow, file layout is 
  866.         used.  The file layout we have chosen allows the plain ASCII text 
  867.         files to be indexed using the supplied index generation utility 
  868.         GENINDEX.  The indexing provides the system with the ability to 
  869.         rapidly locate and display help messages when called upon to do 
  870.         so.  Since the source (WN_HELP.C & GENINDEX.C) to the entire help 
  871.         system is provided, you can modify it to meet your own needs.  
  872.  
  873.         In order to use the help system in your application you must take 
  874.         two preparatory steps: (1) prepare the ASCII text file in the 
  875.         specified format and (2) run the GENINDEX program.  For example, 
  876.         you first create a text file called "TAXES.HLP" using Brief, 
  877.         Vedit, Edlin, or your favorite word processor in non_document 
  878.         (ASCII) mode and then run the GENINDEX program by:
  879.  
  880.                             C> GENINDEX TAXES.HLP
  881.  
  882.         The GENINDEX program reads "TAXES.HLP" and produces "TAXES.NDX".  
  883.         Both "TAXES.HLP" and "TAXES.NDX" must be available to the 
  884.         application program at run time.
  885.  
  886.         To actually use the help system in your application you must 
  887.         first initialize the help system by calling wn_hlinit.  This 
  888.         must be done before any attempt is made to display help messages.
  889.         The help system must only be initialized once.  The call to 
  890.         initialize the help system is of the form:
  891.  
  892.              .....                              /* code */
  893.           rv = wn_hlinit(row, col, width, height, atrib, batrib, file)
  894.              .....                              /* code */
  895.  
  896.         The parameters define the location, size, and attributes of the 
  897.         window in which the help messages will be displayed, along with 
  898.         the name of the help file to be used.  wn_hlinit returns TRUE if 
  899.         all is well, FALSE otherwise.
  900.  
  901.         Initialization does not cause a window to be displayed, it merely 
  902.         sets the system up for later use by opening and reading the index 
  903.         file into memory.
  904.  
  905.  
  906.  
  907.  
  908.  
  909.                                                            Page: 14
  910.                                                      The Window BOSS
  911.  
  912.  
  913.  
  914.         Help System Basics - continued.
  915.  
  916.  
  917.  
  918.         To initialize the system for full screen help messages in a 
  919.         window with white letters on blue background and a similar border 
  920.         using the file "INTELC.HLP", the call to wn_hlinit would be:
  921.  
  922.          wn_hlinit(0,0,78,23,(BLUE<<4|WHITE),(BLUE<<4|WHITE),"intelc");
  923.  
  924.         The help system is now initialized to display full screen help 
  925.         messages using "INTELC.HLP" and "INTELC.NDX" as the help message 
  926.         database. (The BOSSDEMO program uses the above code.)
  927.  
  928.         Important - Unless you intend to modify the help system, the 
  929.         above call to wn_hlinit should always be used - modified only to 
  930.         reflect the name of your help file. 
  931.  
  932.         Obtaining help at run time is accomplished by calling the wn_help 
  933.         function with a subject key word.  For example:
  934.  
  935.              rv = wn_help("%general information%");
  936.  
  937.         Subject key words are located in the ASCII help file you prepare 
  938.         and are processed by the GENINDEX program.  The usage of 
  939.         wn_help() should be clear once we complete the discussion of the 
  940.         file layout.
  941.  
  942.         The text file you prepare consists of help system commands, 
  943.         subject key words, and the actual text to be displayed which is 
  944.         formatted to fit inside the window defined by wn_hlinit.  
  945.  
  946.         Commands 
  947.  
  948.           .cp   - signals end of page 
  949.           *END* - signals end of page and end of help for this subject
  950.  
  951.           Text is sequentially displayed one screen at a time from the 
  952.           subject keyword through any number of .cp delimited screens 
  953.           through and including the screen delimited by *END*.  The 
  954.           system allows for forward and reverse display via the PgDn and 
  955.           PgUp keys.  The .cp signals the end of a single screen in a 
  956.           series of 2 or more screens.  When .cp is detected the message  
  957.           "Esc to quit help, PgUp for previous screen, any other key to 
  958.           continue..." will be displayed.  When *END* is detected, the 
  959.           message "End of help, PgUp for previous screen, any other key 
  960.           to continue..." is displayed.  
  961.  
  962.  
  963.  
  964.  
  965.  
  966.  
  967.  
  968.  
  969.  
  970.                                                            Page: 15
  971.                                                      The Window BOSS
  972.  
  973.  
  974.  
  975.         Help System Basics - continued.
  976.  
  977.  
  978.  
  979.         Keywords:
  980.  
  981.           Keywords are always enclosed within percent signs (%) and 
  982.           signal the beginning of text on a particular subject.  They are 
  983.           used by the GENINDEX program to create the index (NDX) file and 
  984.           are used by you as parameters to the wn_help() function.
  985.  
  986.           In the case of "INTELC.HLP" you will find the following 
  987.           keywords:
  988.  
  989.           %ksend%, %ksend1%, %krecv%, %krecv1%, %checksum xmit1%, 
  990.           %checksum recv1%, %terminal/c1%, %cistty1%, %terminal%, 
  991.           %terminal/c%, %cistty%, %status%, %dos window%, %exit to dos%,
  992.           %close capture%, %autodial%, %ascii xmit%, %checksum xmit%,
  993.           %checksum recv%, %general information%, %bossinfo%, 
  994.           %end-of-file%
  995.  
  996.         Text:
  997.              
  998.           Each screen of text is delimited by either a keyword, the .cp 
  999.           command, or the *END* command.  Text is always formatted to fit 
  1000.           inside the help window.  In the case of "INTELC.HLP" there are 
  1001.           two leading spaces and the text is right justified to end at 
  1002.           column 76.  The two leading and trailing spaces center the text 
  1003.           between the borders.  Blank lines at the top of each screen 
  1004.           (page full) can be used to vertically center the text.  Spaces 
  1005.           on the left can be used to horizontally center text.
  1006.  
  1007.           Important - Unless you intend to modify the help system, the 
  1008.           format defined by "INTELC.HLP" should always be followed for 
  1009.           any help files you create for your own use.
  1010.  
  1011.         4.5.1. Notes
  1012.  
  1013.           The help system is configured to provide a full screen text 
  1014.           message, subject keys are limited to 25 characters, and there 
  1015.           is a limit of 255 subject keys per file.  This can be changed 
  1016.           by modifying the functions found in "wn_help.c"  THERE IS A 
  1017.           DIRECT CORRELATION BETWEEN THE PARAMETERS USED TO INITIALIZE 
  1018.           THE HELP SYSTEM AND THE LAYOUT OF THE ASCII TEXT FILE READ BY 
  1019.           THE GENINDEX PROGRAM.  If you modify the code be sure to also 
  1020.           modify location and text of the messages to be displayed when 
  1021.           .cp and/or *END* are detected.
  1022.          
  1023.  
  1024.  
  1025.  
  1026.  
  1027.  
  1028.  
  1029.  
  1030.  
  1031.                                                            Page: 16
  1032.                                                      The Window BOSS
  1033.  
  1034.  
  1035.  
  1036.         Help System Basics - continued.
  1037.  
  1038.  
  1039.  
  1040.           The GENINDEX program is provided in source form.  An EXEcutable 
  1041.           will have to be created locally.  You may also have to adjust 
  1042.           the logic to account for the way the various compilers treat 
  1043.           <CR><LF> sequences.  This usually amounts to nothing more than 
  1044.           changing the "rb" to "r" in the fopen statement.  The best way 
  1045.           to determine if you have built a properly functioning GENINDEX 
  1046.           program is to run your newly created GENINDEX program against 
  1047.           "INTELC.HLP" to create a new "INTELC.NDX".  Then rebuild the 
  1048.           BOSSDEMO program and test to see if the Intellicom Quick Help 
  1049.           popup is functioning properly.  If it is, you are all set.  If 
  1050.           you receive a "Sorry - No info on... " message, then you will 
  1051.           need to edit GENINDEX to make the "rb"/"r" change.  
  1052.  
  1053.           This help system has nothing in common with the way in which 
  1054.           the data entry help and error messages get displayed.
  1055.  
  1056.           Help files always have a filename extension of "HLP".  Index 
  1057.           files always have a filename extension of "NDX".
  1058.  
  1059.  
  1060.  
  1061.  
  1062.  
  1063.  
  1064.  
  1065.  
  1066.  
  1067.  
  1068.  
  1069.  
  1070.  
  1071.  
  1072.  
  1073.  
  1074.  
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080.  
  1081.  
  1082.  
  1083.  
  1084.  
  1085.  
  1086.  
  1087.  
  1088.  
  1089.  
  1090.  
  1091.  
  1092.                                                            Page: 17
  1093.                                                      The Window BOSS
  1094.  
  1095.  
  1096.  
  1097.         Help System Basics - continued.
  1098.  
  1099.  
  1100.  
  1101.         Here is a sample program that uses INTELC.HLP.
  1102.  
  1103.              #include "winboss.h"
  1104.              main()
  1105.              {
  1106.              WINDOWPTR w1;                   /* window handle */
  1107.              int batrib;                     /* border atrib */
  1108.              int watrib;                     /* window atrib */
  1109.  
  1110.                wn_init();
  1111.                batrib = BLUE<<4 | WHITE;
  1112.                watrib = WHITE<<4 | BLACK;
  1113.                w1 = wn_open(0,0,0,25,10,watrib,batrib);
  1114.                if(!w1) exit(1);
  1115.  
  1116.                wn_hlinit(0,0,78,23,(BLUE<<4|WHITE),(BLUE<<4|WHITE),"intelc");
  1117.  
  1118.                wn_printf(w1, "Press any key\n"); v_getch();
  1119.                wn_help("%ksend%");
  1120.                wn_printf(w1, "Press any key\n"); v_getch();
  1121.                wn_help("%ksend1%");
  1122.                wn_printf(w1, "Press any key\n"); v_getch();
  1123.                wn_help("%krecv%");
  1124.                wn_printf(w1, "Press any key\n"); v_getch();
  1125.                wn_help("%krecv1%");
  1126.                wn_printf(w1, "Press any key\n"); v_getch();
  1127.                wn_help("%checksum xmit1%");
  1128.  
  1129.                wn_printf(w1, "Press any key\n"); v_getch();
  1130.                wn_close(w1);
  1131.                wn_exit();
  1132.                exit(0);
  1133.              }
  1134.  
  1135.              /* End */
  1136.  
  1137.  
  1138.  
  1139.  
  1140.  
  1141.  
  1142.  
  1143.  
  1144.  
  1145.  
  1146.  
  1147.  
  1148.  
  1149.  
  1150.  
  1151.  
  1152.  
  1153.                                                            Page: 18
  1154.                                                      The Window BOSS
  1155.  
  1156.  
  1157.  
  1158.         4.6. Mouse Basics
  1159.  
  1160.         The Window BOSS includes a collection of routines that provide 
  1161.         the building blocks for developing applications that incorporate 
  1162.         Mouse support.  As a programmer you will need following:
  1163.  
  1164.              . The mouse and its associated hardware
  1165.  
  1166.              . The mouse driver software
  1167.  
  1168.              . C and/or Assembly level functions to communicate with the 
  1169.                mouse
  1170.  
  1171.         The first two are provided by the mouse manufacturer and must be 
  1172.         installed as outlined in the manufacturer's literature.  The last 
  1173.         item is provided as part of The Window BOSS. The Window BOSS's 
  1174.         mouse functions adhere to the de facto Microsoft standard. 
  1175.         However, all of the routines have been extensively tested with 
  1176.         both Microsoft and Logitech mice.
  1177.  
  1178.         Mouse Communication
  1179.  
  1180.         The only practical method of communicating with the mouse is 
  1181.         through the mouse device driver, which is accessible via software 
  1182.         interrupt 33H.  This interrupt is not used by DOS and is claimed 
  1183.         by the mouse device driver at its invocation.  Information is 
  1184.         exchanged between the mouse device driver and calling software 
  1185.         via the standard 8086/88 registers. As a Window BOSS user you 
  1186.         will be pleased to know that the burden of having to deal with 
  1187.         the mouse at this level has been replaced by a collection of "C" 
  1188.         level routines that handle all of the aforementioned setup, 
  1189.         software interrupts and register loading/unloading!!
  1190.  
  1191.         Mouse Usage
  1192.  
  1193.         Once the mouse has been initialized (reset), you can show it, 
  1194.         hide it, move it, ask it where it is, check to see if its buttons 
  1195.         have been pressed or released, make it emulate a light pen, put a 
  1196.         cage around it (set its region), define its shape and associated 
  1197.         attribute, or ask it how many buttons it has!
  1198.  
  1199.         Mouse Functions
  1200.  
  1201.         The standard Microsoft mouse supports 16 functions. Logitech's 
  1202.         are the same, although some are tweaked a tad to handle the 3rd 
  1203.         button.  The Window BOSS provides an easy to use interface to the 
  1204.         low level mouse functions and several higher level functions to 
  1205.         ease your applications level programming.
  1206.  
  1207.  
  1208.  
  1209.  
  1210.  
  1211.  
  1212.  
  1213.  
  1214.                                                            Page: 19
  1215.                                                      The Window BOSS
  1216.  
  1217.  
  1218.  
  1219.         Mouse Basics - continued.
  1220.  
  1221.  
  1222.  
  1223.         Mouse Functions - continued.
  1224.  
  1225.         The following table summarizes the 16 Microsoft Mouse Functions:
  1226.  
  1227.              Function       Description              Window BOSS Function
  1228.                 0           Initialize mouse         mo_reset()
  1229.                 1           Show mouse               mo_show()
  1230.                 2           Hide mouse cursor        mo_hide()
  1231.                 3           Get position & status    mo_pos()
  1232.                 4           Set mouse position       mo_move()
  1233.                 5           Get button press info    mo_pbinfo()
  1234.                 6           Get button release info  mo_rbinfo()
  1235.                 7           Set min/max columns      mo_clim()
  1236.                 8           Set min/max rows         mo_rlim()
  1237.                 9 *         Define graphics pointer  mo_sgcursor()
  1238.                10           Define text pointer      mo_scursor()
  1239.                11           Read motion counters     mo_motion()
  1240.                12 *         Define event handler     mo_task()
  1241.                13           Light pen emulation on   mo_lpon()
  1242.                14           Light pen emulation off  mo_lpoff()
  1243.                15 *         Set motion pixel ratio   mo_ratio()
  1244.  
  1245.         In addition to the above low level interface routines, the 
  1246.         following application's level functions have been implemented to 
  1247.         ease the mouse's natural display adapter sensitivity.  Without 
  1248.         these routines, mouse applications would have to deal with the 
  1249.         mouse in a 640x200-pixel plane - even in text mode!
  1250.  
  1251.              mo_rcpos()     Return current mouse position (row, col)
  1252.              mo_locate()    Locate mouse (row, col)
  1253.              mo_press()     Get button pressed info (button, location..)
  1254.              mo_release()   Get button released info ( " " " " " " " " )
  1255.              mo_region()    Set mouse hot area (row, col, width, height)
  1256.              mo_setptr()    Set mouse pointer (style, attributes)
  1257.              mo_wait()      Wait for mouse to settle (de bouncing logic)
  1258.              mo_nbut()      Return # of buttons on mouse
  1259.  
  1260.         Most mouse applications will use and generally only need to use: 
  1261.         mo_reset(), mo_show(), mo_hide(), and most or all of the 
  1262.         application level functions.  
  1263.  
  1264.         The low level functions are provided for those who prefer to deal 
  1265.         with the mouse on its 640 x 200 pixel plane.
  1266.  
  1267.         All of the above supported functions are documented in the 
  1268.         FUNCTION CALL SYNOPSIS section of this manual.
  1269.  
  1270.         * Interfaces to these functions are provided, but are not 
  1271.         supported, by Star Guidance. 
  1272.  
  1273.  
  1274.  
  1275.                                                            Page: 20
  1276.                                                      The Window BOSS
  1277.  
  1278.  
  1279.  
  1280.         Mouse Basics - continued.
  1281.  
  1282.  
  1283.  
  1284.         Mouse Programming Example (Basic)
  1285.  
  1286.         #include "winboss.h"                    /* ALWAYS */
  1287.  
  1288.         main()
  1289.         {
  1290.         MOUSEPTR m1;                            /* my mouse ptr */
  1291.         int mstat, mclik, mrow, mcol;           /* mouse stuff */
  1292.         int i;                                  /* scratch */
  1293.  
  1294.           v_cls(NORMAL);                        /* clear the screen */
  1295.           v_locate(0,0,0);                      /* locate the cursor */
  1296.  
  1297.           m1 = mo_reset();                      /* init mouse */
  1298.  
  1299.           if(m1) {                              /* mouse exists */
  1300.             printf("Mouse exists with %d buttons.\n", mo_nbutt(m1));
  1301.             mo_setptr(m1, 0x1E, NORMAL);        /* set mouse pointer style */
  1302.             mo_reigon(m1, 0, 0, 80, 25);        /* set mouse "window" */
  1303.             mo_show(m1);                        /* show the critter */
  1304.  
  1305.             v_locate(0,5,0);
  1306.             printf("Roll test... move mouse, click left or right to end.\n");
  1307.             do {                                /* rolling test */
  1308.               mo_rcpos(m1, &mstat, &mrow, &mcol);
  1309.               v_locate(0,6,0);
  1310.               printf("Mouse @ %03d,%03d", mrow, mcol);
  1311.             } while (!mstat);
  1312.  
  1313.             v_cls(NORMAL);                      /* clear screen */
  1314.             v_locate(0,0,0);                    /* home cursor */
  1315.             mo_hide(m1);                        /* hide mouse */
  1316.             m1 = mo_reset();                    /* reset mouse */
  1317.             exit(0);                            /* finito */
  1318.           }
  1319.           else {
  1320.             printf("NO MICE HERE!!\n");         /* tell of woe... */
  1321.             exit(0);                            /* exit */
  1322.           }
  1323.         }
  1324.  
  1325.         /* End */
  1326.  
  1327.  
  1328.  
  1329.  
  1330.  
  1331.  
  1332.  
  1333.  
  1334.  
  1335.  
  1336.                                                            Page: 21
  1337.                                                      The Window BOSS
  1338.  
  1339.  
  1340.  
  1341.         4.7. Important Concepts
  1342.  
  1343.         The preceding programming examples serve as the foundation for 
  1344.         some fundamental, but very important, concepts.  
  1345.  
  1346.         4.7.1. WINBOSS.H
  1347.  
  1348.         The Window BOSS requires the file "winboss.h" to be included in 
  1349.         any source code files that are going to reference any of the 
  1350.         windowing, data entry, or form control functions.  Take the time 
  1351.         to peruse this file as it contains all of the constants and 
  1352.         structures used by both The Window BOSS and Data Clerk.  
  1353.         Also, please note that WINBOSS.H includes other standard compiler 
  1354.         header files.
  1355.  
  1356.         4.7.2. Window Handles
  1357.  
  1358.         All windowing functions (any function beginning with "wn_") 
  1359.         either explicitly require an associated window pointer to work, 
  1360.         or assume one already is, or will be, created.  
  1361.  
  1362.         4.7.3. Mouse Handles
  1363.  
  1364.         All mouse functions (any function beginning with "mo_") 
  1365.         either explicitly require an associated mouse pointer to work, 
  1366.         or assume one already is, or will be, created.  
  1367.  
  1368.         4.7.4. Window Origin
  1369.  
  1370.         Windows have an origin relative to the upper left hand corner of 
  1371.         the screen which is always row 0, and column 0.
  1372.  
  1373.         4.7.5. Text and Data Field Origins
  1374.  
  1375.         Text and data fields have an origin relative to the upper left 
  1376.         hand corner of the window, which is always row 0, column 0.
  1377.  
  1378.         4.7.6. Attributes
  1379.  
  1380.         Attributes (foreground/background colors) must be specified for 
  1381.         windows, borders, and data entry fields.  Prompts for data entry 
  1382.         fields always have the same attributes as the window. The fields 
  1383.         themselves can have, but do not require, a different attribute 
  1384.         set.
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.  
  1391.  
  1392.  
  1393.  
  1394.  
  1395.  
  1396.  
  1397.                                                            Page: 22
  1398.                                                      The Window BOSS
  1399.  
  1400.  
  1401.  
  1402.         4.7.7. Fields and Forms
  1403.  
  1404.         Fields are defined by calling the field definition functions 
  1405.         (wn_gdate, wn_gtime, wn_gphone, ...) with "SET" as the function 
  1406.         code (1st arg), a valid form handle (2nd arg), a field sequence 
  1407.         number (3rd arg), and the window handle (4th arg) belonging to 
  1408.         the window in which the form is to be displayed.  The same 
  1409.         functions that are used to retrieve discrete information can be 
  1410.         combined to create a form when used in conjunction with 
  1411.         wn_frmopn() and wn_frmget().  Note the use of XEQ vs. SET, NFRM 
  1412.         vs. f1, and NFLD in the preceding two program examples.  XEQ 
  1413.         stands for "execute now", while SET stands for "set up for later 
  1414.         execution under wn_frmget()".
  1415.  
  1416.         Forms are anchored to a particular window and must be created by 
  1417.         wn_frmopn() and defined with field definition functions.
  1418.  
  1419.         Data entry fields can be edited, pre-filled, have validation 
  1420.         ranges, and have both help and error messages associated with 
  1421.         them.  
  1422.  
  1423.         4.7.8. Return Values
  1424.  
  1425.         Some functions return an indication of success or failure which 
  1426.         you can foolishly ignore, or check to determine what action to 
  1427.         take.
  1428.  
  1429.         4.7.9. Closing Forms and Windows
  1430.  
  1431.         Both forms and windows should be closed when they are no longer 
  1432.         needed.  Although you can close them in any order, it makes sense 
  1433.         to close all forms associated with a window before closing the 
  1434.         window itself.  As a side note - attempting to reference either 
  1435.         forms or windows which have been closed can lead to unpredictable 
  1436.         results.
  1437.  
  1438.  
  1439.  
  1440.  
  1441.  
  1442.  
  1443.  
  1444.  
  1445.  
  1446.  
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458.                                                            Page: 23
  1459.                                                      The Window BOSS
  1460.  
  1461.  
  1462.  
  1463.         Important Concepts - continued.
  1464.  
  1465.  
  1466.  
  1467.         4.7.10. Overlapping Windows
  1468.  
  1469.         The Window BOSS fully supports the concept of overlapping 
  1470.         windows, that is to say that you can have several windows on the 
  1471.         screen at the same time and freely access any one of them without 
  1472.         having to be concerned with the order in which they were opened 
  1473.         or whether or not any other windows overlap the one you wish to 
  1474.         access.  The Window BOSS employs the "most recently used is 
  1475.         active" concept.  This concept is based on the following:
  1476.  
  1477.              . The last window referenced is the current active 
  1478.                window.  
  1479.  
  1480.              . The current active window is always the top window.
  1481.  
  1482.         For example, let us assume that you have opened three overlapping 
  1483.         windows in the following order; w1, w2, w3. w3 is considered to 
  1484.         be the top window because it was the last window referenced. If 
  1485.         you now reference, or explicitly activate w2, The Window BOSS 
  1486.         will automatically adjust the screen image to insure that w2 is 
  1487.         now the top window with w3 and w1 being partially hidden by w2.
  1488.  
  1489.                   Before                   After
  1490.  
  1491.                   +----------+             +----------+
  1492.                   |  W1      |             | W1       |
  1493.                   |  +----------+          |  +----------+
  1494.                   |  | W2       |          |  | W2       |
  1495.                   |  |  +------------+     |  |          |----+
  1496.                   |  |  | W3         |     |  |          | W3 |
  1497.                   |  |  |            |     |  |          |    |
  1498.                   |  |  +------------+     |  |          |----+
  1499.                   |  |          |          |  |          |
  1500.                   |  +----------+          |  +----------+
  1501.                   |          |             |          |
  1502.                   +----------+             +----------+
  1503.  
  1504.         It is extremely important to keep in mind that The Window BOSS 
  1505.         will automatically activate (bring to the top) the window being 
  1506.         referenced.  By keeping your screen layouts attractive and 
  1507.         uncluttered there will be a minimum of window thrashing which is 
  1508.         both annoying and time consuming.
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.                                                            Page: 24
  1520.                                                      The Window BOSS
  1521.  
  1522.  
  1523.  
  1524.         Important Concepts - continued.
  1525.  
  1526.  
  1527.  
  1528.         4.7.11. Functions
  1529.  
  1530.         The Window BOSS's functions fall into four major groups: those 
  1531.         that manipulate windows, those that deal with data entry, those 
  1532.         that deal with the mouse, and those that deal with the video or 
  1533.         keyboard interface at a relatively low level.  All window and 
  1534.         data manipulation functions begin with the prefix "wn_" as in 
  1535.         "wn_open".  All mouse functions begin with "mo_" as in 
  1536.         "mo_reset", while all video and keyboard based functions begin 
  1537.         with "v_" or "_" as in "v_getch" and "_putch".  This convention 
  1538.         makes it easy to remember where to look when you want to do 
  1539.         something.  Additionally, there are several global functions 
  1540.         which begin with "wns_".  These functions, although visible to 
  1541.         the outside world, are used internally by The Window BOSS. 
  1542.  
  1543.         So ends the tale of the basics, you are now ready to add sizzle, 
  1544.         bright lights, and artistic touches to all your applications!  
  1545.  
  1546.  
  1547.  
  1548.  
  1549.  
  1550.  
  1551.  
  1552.  
  1553.  
  1554.  
  1555.  
  1556.  
  1557.  
  1558.  
  1559.  
  1560.  
  1561.  
  1562.  
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570.  
  1571.  
  1572.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.  
  1578.  
  1579.  
  1580.                                                            Page: 25
  1581.                                                      The Window BOSS
  1582.  
  1583.  
  1584.  
  1585.         5. Distribution Methods & Media Kits 
  1586.  
  1587.         The Window BOSS is distributed on HIGH DENSITY diskettes.  There 
  1588.         are two media kits available: The Shareware diskette kit and The 
  1589.         Source diskette kit.  This doucument describes both media kits.  
  1590.         Neither media kit contains ALL of the files listed.
  1591.  
  1592.         The Shareware diskettes can be freely copied and shared.  The 
  1593.         Source diskettes cannot. In either case, you receive a bundled 
  1594.         product -- that is to say, we do not require you to order a 
  1595.         separate media kit for Microsoft, another for Borland, and so on.  
  1596.         All our products include support for all the compilers we 
  1597.         support. This makes moving from one compiler to another child's 
  1598.         play, and it also helps to protect your software development 
  1599.         investment, while at the same time saving you a significant sum 
  1600.         of money!
  1601.  
  1602.         5.1. CompuServe, GENIE, BIX, & Bulletin Board Files
  1603.  
  1604.         We always upload the latest release of shareware files to GENIE, 
  1605.         CompuServe, BIX, and selected BBS(s) around the country.  These 
  1606.         files can be found in the Vendor Support Software Library on the 
  1607.         IBM Round Table (M 616) of GENIE, in the "C" Language Section on 
  1608.         the IBM Programming Sig (GO IBMPRO) of CompuServe, and in the 
  1609.         "C.LANGUAGE" section of the "ibm.listings" on BIX. In all cases 
  1610.         we try to name the required files as BOSS01.LZH (code++), 
  1611.         BOSS2A.LZH & BOSS2B.LZH (libs), BOSS03.LZH (documentation).  
  1612.         Naturally, this naming convention is subject to the approval of 
  1613.         the respective service provider.  However, it is reasonable to 
  1614.         assume that the required files will always conform to a naming 
  1615.         convention that begins with "BOSS" or "BOS" and have the keyword 
  1616.         "windows" associated with them.  
  1617.  
  1618.         If you can not find The Window BOSS files on GENIE, BIX, or 
  1619.         CompuServe it may be due to a restructuring of the SIGs by the 
  1620.         respective service provider.  Try looking in the vendor support, 
  1621.         systems, or language areas of the SIGS.
  1622.  
  1623.         Bulletin Board files follow the same naming conventions as GENIE 
  1624.         and CompuServe files.  
  1625.  
  1626.         5.2. The SHAREWARE Distribution Diskette(s)
  1627.  
  1628.           The SHAREWARE diskette(s) contain the following files:
  1629.  
  1630.              LHA.EXE             <- Archive utility
  1631.              LHA.DOC             <- Archive utility documentation    
  1632.              BOSS_DOC.LZH        <- Window BOSS Documentation archive
  1633.              BOSS_SUP.LZH        <- Support archive (code, etc.)
  1634.              READ.ME             <- Important notes
  1635.  
  1636.  
  1637.  
  1638.  
  1639.  
  1640.  
  1641.                                                            Page: 26
  1642.                                                      The Window BOSS
  1643.  
  1644.  
  1645.  
  1646.         The Shareware Distribution Diskette - continued.
  1647.  
  1648.  
  1649.              BOSS_LB1.LZH        <- Library archive (Microsoft)
  1650.              BOSS_LB2.LZH        <- Library archive (Watcom)
  1651.              BOSS_LB3.LZH        <- Library archive (Mix Power C)
  1652.              BOSS_LB4.LZH        <- Library archive (Lattice)
  1653.              BOSS_LB5.LZH        <- Library archive (Borland)
  1654.              BOSS_LB6.LZH        <- Library archive (Zortech)
  1655.              BOSS_LB7.LZH        <- Library archive (TopSpeed)
  1656.  
  1657.            =============================================================  
  1658.  
  1659.              Contents of BOSS_DOC
  1660.  
  1661.                BOSS.MAN          <- This manual
  1662.                BOSS.TOC          <- Table of Contents
  1663.  
  1664.              Contents of BOSS_SUP
  1665.  
  1666.                TSS.BAT           <- Compiler Driver - TopSpeed C
  1667.                LCS6.BAT          <- Compiler Driver - Lattice 6.0
  1668.                MSC6.BAT          <- Compiler Driver - Microsoft C 6.X
  1669.                MSQC25.BAT        <- Compiler Driver - Quick C 2.5
  1670.                PCCM.BAT          <- Compiler Driver - Mix Power C (Med)
  1671.                PCCS.BAT          <- Compiler Driver - Mix Power C (Small)
  1672.                TCS.BAT           <- Compiler Driver - Borland Turbo C
  1673.                BCS.BAT           <- Compiler Driver - Borland C
  1674.                WOCS.BAT          <- Compiler Driver - Watcom C
  1675.                ZTCS.BAT          <- Compiler Driver - Zortech C
  1676.                LOADTS.BAT        <- Link Batch file - TopSpeed C
  1677.                LOADLC6.BAT       <- Link Batch file - Lattice 
  1678.                LOADMS6.BAT       <- Link Batch file - Microsoft C 
  1679.                LOADQC25.BAT      <- Link Batch file - Quick C 
  1680.                LOADPC.BAT        <- Link Batch file - Mix Power C
  1681.                LOADTC.BAT        <- Link Batch file - Borland Turbo C   
  1682.                LOADBC.BAT        <- Link Batch file - Borland C
  1683.                LOADWAT.BAT       <- Link Batch file - Watcom C
  1684.                LOADZTC.BAT       <- Link Batch file - Zortech C
  1685.                TSAP.PRJ          <- MAKE file       - TopSpeed C
  1686.  
  1687.  
  1688.  
  1689.  
  1690.  
  1691.  
  1692.  
  1693.  
  1694.  
  1695.  
  1696.  
  1697.  
  1698.  
  1699.  
  1700.  
  1701.  
  1702.                                                            Page: 27
  1703.                                                      The Window BOSS
  1704.  
  1705.  
  1706.  
  1707.         The Shareware Distribution Diskette - continued.
  1708.  
  1709.  
  1710.              Contents of BOSS_SUP - continued.
  1711.  
  1712.                BOSSDEMO.C        <- Source to BOSSDEMO
  1713.                BOSSDEMO.EXE      <- DEMO Program
  1714.                PDDEMO.C          <- Source to PDDEMO (Pulldown Demo)
  1715.                PDDEMO.EXE        <- Pulldown Demo Progarm
  1716.                GENINDEX.C        <- Source to GENINDEX
  1717.                HELLO.C           <- The Classic...
  1718.                INTELC.HLP        <- Demo DATA file
  1719.                INTELC.NDX        <- Index for Demo DATA file
  1720.                REV.HST           <- Revision History
  1721.                REV.LEV           <- Revision Level
  1722.                SAMPLE.C          <- Data entry sample program
  1723.                WINBOSS.FN6       <- Function Prototype INCLUDE file
  1724.                WINBOSS.FNB       <- Function Prototype INCLUDE file 
  1725.                WINBOSS.FNZ       <- Function Prototype INCLUDE file
  1726.                WINBOSS.FNT       <- Function Prototype INCLUDE file
  1727.                WINBOSS.EXT       <- External Definition INCLUDE file
  1728.                WINBOSS.H         <- BOSS INCLUDE file
  1729.                WN_FRMGE.C        <- Data Entry form reader
  1730.                WN_GBOOL.C        <- Data Entry function (logical)
  1731.                WN_GDATE.C        <- Data Entry function (dates)
  1732.                WN_GDOUB.C        <- Data Entry function (double)
  1733.                WN_GEDAT.C        <- Data Entry function (dates, Europe)
  1734.                WN_GFLOA.C        <- Data Entry function (floats)
  1735.                WN_GPHON.C        <- Data Entry function (phone)
  1736.                WN_GTIME.C        <- Data Entry function (time)
  1737.                WN_GULON.C        <- Data Entry function (unsigned long)
  1738.                WN_GINT.C         <- Data Entry function (integer)
  1739.                WN_GLONG.C        <- Data Entry function (long)
  1740.                WN_GPWOR.C        <- Data Entry function (password)
  1741.                WN_GTEXT.C        <- Data Entry function (various text)
  1742.                WN_GUINT.C        <- Data Entry function (unsigned int)
  1743.                WN_GSSN.C         <- Data Entry function (social sec. #)
  1744.                WN_IEMSG.C        <- Data Entry error message handler
  1745.                WN_IHMSG.C        <- Data Entry help message hander
  1746.                WN_HELP.C         <- Help function source
  1747.                WN_PDOWN.C        <- Pull down function source
  1748.                WN_POPUP.C        <- Popup function source
  1749.                WN_PUTS.C         <- Source to wn_puts()
  1750.  
  1751.              Contents of BOSS_LB1
  1752.  
  1753.                SMSC6.LIB         <- BOSS library - Microsoft C 
  1754.                SMSQC25.LIB       <- BOSS library - Microsoft Q/C 
  1755.                SMSQCW.LIB        <- BOSS library - Microsoft Q/C Windows
  1756.                WINBOSS.FNS       <- Function Prototype INCLUDE File
  1757.  
  1758.  
  1759.  
  1760.  
  1761.  
  1762.  
  1763.                                                            Page: 28
  1764.                                                      The Window BOSS
  1765.  
  1766.  
  1767.  
  1768.         The Shareware Distribution Diskette - continued.
  1769.  
  1770.  
  1771.              Contents of BOSS_LB2
  1772.  
  1773.                WATOC.LIB         <- BOSS library - Watcom C
  1774.                WINBOSS.FNS       <- Function Prototype INCLUDE File
  1775.  
  1776.              Contents of BOSS_LB3
  1777.  
  1778.                SWIN.MIX          <- BOSS library - Mix Power C (Small)
  1779.                MWIN.MIX          <- BOSS library - Mix Power C (Medium)
  1780.                WINBOSS.FNS       <- Function Prototype INCLUDE File
  1781.  
  1782.              Contents of BOSS_LB4
  1783.  
  1784.                SLAT6.LIB         <- BOSS library - Lattice C 6.0
  1785.                WINBOSS.FNS       <- Function Prototype INCLUDE File
  1786.  
  1787.              Contents of BOSS_LB5
  1788.  
  1789.                STC201.LIB        <- BOSS library - Borland Turbo C
  1790.                STC.LIB           <- BOSS library - Borland Turbo C++ 
  1791.                SBC.LIB           <- BOSS Library - Borland C++ 
  1792.                WINBOSS.FNS       <- Function Prototype INCLUDE File
  1793.  
  1794.              Contents of BOSS_LB6
  1795.  
  1796.                ZTECH.LIB         <- BOSS library - Zortech 
  1797.                WINBOSS.FNS       <- Function Prototype INCLUDE File
  1798.              
  1799.              Contents of BOSS_LB7
  1800.              
  1801.                TSC.LIB           <- BOSS library - TopSpeed C 
  1802.                WINBOSS.FNS       <- Function Prototype INCLUDE File
  1803.  
  1804.  
  1805.  
  1806.  
  1807.  
  1808.  
  1809.  
  1810.  
  1811.  
  1812.  
  1813.  
  1814.  
  1815.  
  1816.  
  1817.  
  1818.  
  1819.  
  1820.  
  1821.  
  1822.  
  1823.  
  1824.                                                            Page: 29
  1825.                                                      The Window BOSS
  1826.  
  1827.  
  1828.  
  1829.         5.3. The SOURCE Distribution Diskette(s)
  1830.  
  1831.          The SOURCE diskette(s) contain the following self extracting LHA 
  1832.          archive and support files:
  1833.  
  1834.              DOC.EXE             <- Manual 
  1835.              DEMO.EXE            <- DEMO program & data files 
  1836.              READ.ME             <- Important notes
  1837.              REVHST.EXE          <- Revision History 
  1838.              REV.LEV             <- Revision Level 
  1839.  
  1840.              CFILES.EXE          <- Source to all "C" modules
  1841.              ASMFILES.EXE        <- Source to all "Assembly" modules
  1842.  
  1843.              MS6.EXE             <- Microsoft C Specific files
  1844.              MSQC25.EXE          <- Microsoft Quick C Specific files
  1845.              MSQCWIN.EXE         <- Microsoft Quick C for Windows Specific files
  1846.              BCPP.EXE            <- Borland C++ Specific files
  1847.              TCPP.EXE            <- Borland Turbo C++ Specific files
  1848.              TC201.EXE           <- Borland Turbo C Specific files
  1849.              WATCOM.EXE          <- Watcom Specific files
  1850.              LC6.EXE             <- Lattice Specific files
  1851.              MIX.EXE             <- Mix Power C Specific files
  1852.              TSC.EXE             <- TopSpeed C Specific files
  1853.              ZTC.EXE             <- Zortech C Specific files
  1854.  
  1855.          Contents of DEMO.EXE (Demo programs and demo data files)
  1856.  
  1857.              BOSSDEMO.EXE        <- All purpose demo program
  1858.              PDDEMO.EXE          <- Pulldown Demo
  1859.              INTELC.HLP          <- BOSSDEMO data file
  1860.              INTELC.NDX          <- BOSSDEMO data file   
  1861.  
  1862.  
  1863.  
  1864.  
  1865.  
  1866.  
  1867.  
  1868.  
  1869.  
  1870.  
  1871.  
  1872.  
  1873.  
  1874.  
  1875.  
  1876.  
  1877.  
  1878.  
  1879.  
  1880.  
  1881.  
  1882.  
  1883.  
  1884.  
  1885.                                                            Page: 30
  1886.                                                      The Window BOSS
  1887.  
  1888.  
  1889.  
  1890.         The SOURCE Distribution Diskette - continued.
  1891.              
  1892.  
  1893.  
  1894.              Contents of CFILES.EXE (C Source Files)
  1895.  
  1896.                BOSSDEMO.C        <- BOSSDEMO Source
  1897.                PDDEMO.C          <- Pulldown Demo Source
  1898.                DOSINT.C          <- AZTEC compatibility module.
  1899.                GENINDEX.C        <- GENINDEX Source
  1900.                HELLO.C           <- The classic...
  1901.                SCANCODE.C        <- Quickie to display KB scancodes
  1902.                SAMPLE.C          <- Data entry sample program
  1903.                WINDOWS.C         <- Globals 
  1904.                WINBOSS.H         <- Window BOSS INCLUDE file
  1905.                WINBOSS.EXT       <- Window BOSS INCLUDE file 
  1906.                WN_ACTIV.C        <- Window activation, memory mgmt ++
  1907.                WN_BIOS.C         <- BIOS video functions
  1908.                WN_BOXSE.C        <- Set box drawing character set
  1909.                WN_CLOSE.C        <- Window Close
  1910.                WN_CLR.C          <- Clear window
  1911.                WN_CLRFN.C        <- Clear line, end of window
  1912.                WN_COLOR.C        <- Set window colors
  1913.                WN_DBORD.C        <- Draw window borders
  1914.                WN_DELRO.C        <- Delete row in window
  1915.                WN_DMA.C          <- Set video access mode
  1916.                WN_SCROL.C        <- Set window scrolling method
  1917.                WN_HELP.C         <- Help function source
  1918.                WN_POPUP.C        <- Popup menu source
  1919.                WN_PDOWN.C        <- Pulldown menu source
  1920.                WN_INIT.C         <- Initialize window system
  1921.                WN_DMODE.C        <- Set window display mode
  1922.                WN_FIXCS.C        <- Fix physical cursor location
  1923.                WN_GETS.C         <- Get string with validation   
  1924.                WN_INSRO.C        <- Insert row in window
  1925.                WN_LOCAT.C        <- Locate cursor in window
  1926.                WN_MOVE.C         <- Move window
  1927.                WN_MOUSE.C        <- Mouse interface routines
  1928.                WN_NATRI.C        <- Set new attributes NOW
  1929.                WN_OPEN.C         <- Window open
  1930.                WN_PRINT.C        <- Window printf
  1931.                WN_PUTS.C         <- Put string in window
  1932.                WN_RESTO.C        <- Restore window image
  1933.                WN_SAVE.C         <- Save window image
  1934.                WN_STRING.C       <- String (char) functions
  1935.                WN_SUP.C          <- Internal support functions
  1936.                WN_SYNC.C         <- Set/Clear cursor sync
  1937.                WN_TITLE.C        <- Title window (BASIC)
  1938.                WM_STITLE.C       <- Title window (SUPER)
  1939.                WN_WRAP.C         <- Set/Clear text wrap
  1940.                WPRINTF.C         <- Alternate window printf
  1941.  
  1942.  
  1943.  
  1944.  
  1945.  
  1946.                                                            Page: 31
  1947.                                                      The Window BOSS
  1948.  
  1949.  
  1950.  
  1951.         The SOURCE Distribution Diskette - continued.
  1952.              
  1953.  
  1954.  
  1955.              Contents of CFILES.EXE (C Source Files - continued.)
  1956.  
  1957.  
  1958.                WINBOSS.FNT       <- Prototype header
  1959.                WINBOSS.FNB       <- Prototype header
  1960.                WINBOSS.FN6       <- Prototype header
  1961.                WINBOSS.FNZ       <- Prototype header
  1962.                WN_GDATE.C        <- Data entry - get date
  1963.                WN_GEDATE.C       <- Data entry - get date (Europe)
  1964.                WN_GDOUBLE.C      <- Data entry - get double
  1965.                WN_GTIME.C        <- Data entry - get time
  1966.                WN_GTEXT.C        <- Data entry - get text
  1967.                WN_GPHONE.C       <- Data entry - get phone #
  1968.                WN_GPWORD.C       <- Data entry - get password
  1969.                WN_GINT.C         <- Data entry - get integer
  1970.                WN_GUINT.C        <- Data entry - get unsigned integer
  1971.                WN_GULONG.C       <- Data entry - get unsigned long
  1972.                WN_GLONG.C        <- Data entry - get long
  1973.                WN_GFLOAT.C       <- Data entry - get float 
  1974.                WN_GBOOL.C        <- Data entry - get logical  
  1975.                WN_GSSN           <- Data entry - get social security #
  1976.                WN_DTEXT.C        <- Data entry - display text
  1977.                WN_FRMOPN.C       <- Data entry - FORM open
  1978.                WN_FRMGET.C       <- Data entry - FORM read
  1979.                WN_FRMCLS.C       <- Data entry - FORM close
  1980.                WN_INPUT.C        <- Data entry - common input 
  1981.                WN_IEMSG.C        <- Data entry - error msg handler
  1982.                WN_IHMSG.C        <- Data entry - help msg handler
  1983.            
  1984.              Contents of ASMFILES.EXE (ASM Source Files)
  1985.  
  1986.                MSVLIB.ASM        <- ASM routines for Microsoft, TopSpeed,
  1987.                                     and Zortech
  1988.                VLIB.ASM          <- ASM routines for Lattice 
  1989.                PCVLIB.ASM        <- ASM routines for Mix Power C
  1990.                                     Microsoft MASM format
  1991.                WCVLIB.ASM        <- ASM routines for WATCOM C
  1992.                TCVLIB.ASM        <- ASM routines for Borland C++ & Turbo C++
  1993.  
  1994.  
  1995.  
  1996.  
  1997.  
  1998.  
  1999.  
  2000.  
  2001.  
  2002.  
  2003.  
  2004.  
  2005.  
  2006.  
  2007.                                                            Page: 32
  2008.                                                      The Window BOSS
  2009.  
  2010.  
  2011.  
  2012.         The SOURCE Distribution Diskette - continued.
  2013.              
  2014.  
  2015.  
  2016.              Contents of MIX.EXE (Mix Power C Specific Files)
  2017.  
  2018.                LOADL.BAT         <- Sample link driver - large model
  2019.                LOADM.BAT         <- Sample link driver - medium model
  2020.                LOADS.BAT         <- Sample link driver - small model
  2021.                MAKELIB.BAT       <- Library driver (all models)
  2022.                PCCL.BAT          <- Large model compiler driver
  2023.                PCCM.BAT          <- Medium model compiler driver
  2024.                PCCS.BAT          <- Small model compiler driver
  2025.                SCOMPILE.BAT      <- Small model - compile *.c
  2026.                MCOMPILE.BAT      <- Medium model - compile *.c
  2027.                LCOMPILE.BAT      <- Large model - compile *.c
  2028.                MAKELIB.CMD       <- Data file for MAKELIB.BAT
  2029.                WINBOSS.FNS       <- Type checking head
  2030.                ?PCVLIB.MIX       <- Memory model specific object file
  2031.                LWIN.MIX          <- Large model library
  2032.                MWIN.MIX          <- Medium model library
  2033.                SWIN.MIX          <- Small model library
  2034.                BOSSDEMO.PRJ      <- Project file for BOSSDEMO program
  2035.  
  2036.              Contents of LC6.EXE (Lattice C Specific Files)
  2037.  
  2038.                LCOMPILE.BAT      <- Large model - compile *.c
  2039.                SCOMPILE.BAT      <- Small model - compile *.c
  2040.                PCOMPILE.BAT      <- P model - compile *.c
  2041.                DCOMPILE.BAT      <- D model - compile *.c
  2042.                HCOMPILE.BAT      <- Huge model - compile.c
  2043.                LCS.BAT           <- Small model compiler driver
  2044.                LCL.BAT           <- Large model compiler driver
  2045.                LCP.BAT           <- P model compiler driver
  2046.                LCD.BAT           <- D model compiler driver
  2047.                LCH.BAT           <- H model compiler driver
  2048.                LOADLC.BAT        <- Link driver for BOSSDEMO
  2049.                LWIN.LIB          <- Large model library
  2050.                SWIN.LIB          <- Small model library
  2051.                MAKELIB.BAT       <- Build LIB file from OBJ(s)
  2052.                MAKELIB.CMD       <- Data file for MAKELIB.BAT
  2053.                WINBOSS.FNS       <- Type checking header
  2054.                ?VLIB.OBJ         <- Memory model specific object file
  2055.  
  2056.  
  2057.  
  2058.  
  2059.  
  2060.  
  2061.  
  2062.  
  2063.  
  2064.  
  2065.  
  2066.  
  2067.  
  2068.                                                            Page: 33
  2069.                                                      The Window BOSS
  2070.  
  2071.  
  2072.  
  2073.         The SOURCE Distribution Diskette - continued.
  2074.  
  2075.  
  2076.  
  2077.              Contents of BCPP.EXE (Borland C++ Compiler)
  2078.  
  2079.                BOSSDEMO.PRJ      <- TC Project file for BOSSDEMO
  2080.                SAMPLE.PRJ        <- TC Project file for SAMPLE
  2081.                HELLO.PRJ         <- TC Project file for HELLO
  2082.                LCOMPILE.BAT      <- TCC - Large model - compile *.c 
  2083.                SCOMPILE.BAT      <- TCC - Small model - compile *.c
  2084.                CCOMPILE.BAT      <- TCC - Compact model - compile *.c
  2085.                MCOMPILE.BAT      <- TCC - Medium model - compile *.c
  2086.                HCOMPILE.BAT      <- TCC - Huge model - compile *.c
  2087.                LOADBC.BAT        <- Tlink driver for BOSSDEMO
  2088.                LWIN.LIB          <- Large model library
  2089.                MAKELIB.BAT       <- Build LIB from OBJ(s)
  2090.                MAKELIB.CMD       <- Data file for MAKELIB.BAT
  2091.                SWIN.LIB          <- Small model library
  2092.                BCCL.BAT          <- Large model BCC compiler driver
  2093.                BCCS.BAT          <- Small model BCC compiler driver
  2094.                BCCM.BAT          <- Medium model BCC compiler driver
  2095.                BCCC.BAT          <- Compact model BCC compiler driver
  2096.                BCCH.BAT          <- Huge model BCC compiler driver
  2097.                WINBOSS.FNS       <- Type checking header
  2098.                ?TCVLIB.OBJ       <- Memory model specific object file
  2099.  
  2100.              Contents of TCPP.EXE (Borland TurboC++ Compiler)
  2101.              Contents of TC201.EXE (Borland TurboC Compiler)
  2102.  
  2103.                BOSSDEMO.PRJ      <- TC Project file for BOSSDEMO
  2104.                SAMPLE.PRJ        <- TC Project file for SAMPLE
  2105.                HELLO.PRJ         <- TC Project file for HELLO
  2106.                LCOMPILE.BAT      <- TCC - Large model - compile *.c 
  2107.                SCOMPILE.BAT      <- TCC - Small model - compile *.c
  2108.                CCOMPILE.BAT      <- TCC - Compact model - compile *.c
  2109.                MCOMPILE.BAT      <- TCC - Medium model - compile *.c
  2110.                HCOMPILE.BAT      <- TCC - Huge model - compile *.c
  2111.                LOADTC.BAT        <- Tlink driver for BOSSDEMO
  2112.                LWIN.LIB          <- Large model library
  2113.                MAKELIB.BAT       <- Build LIB from OBJ(s)
  2114.                MAKELIB.CMD       <- Data file for MAKELIB.BAT
  2115.                SWIN.LIB          <- Small model library
  2116.                TCCL.BAT          <- Large model TCC compiler driver
  2117.                TCCS.BAT          <- Small model TCC compiler driver
  2118.                TCCM.BAT          <- Medium model TCC compiler driver
  2119.                TCCC.BAT          <- Compact model TCC compiler driver
  2120.                TCCH.BAT          <- Huge model TCC compiler driver
  2121.                WINBOSS.FNS       <- Type checking header
  2122.                ?TCVLIB.OBJ       <- Memory model specific object file 
  2123.                   or
  2124.                ?MSVLIB.OBJ       <- Memory model specific object file
  2125.  
  2126.  
  2127.  
  2128.  
  2129.                                                            Page: 34
  2130.                                                      The Window BOSS
  2131.  
  2132.  
  2133.  
  2134.         The SOURCE Distribution Diskette - continued.
  2135.              
  2136.  
  2137.  
  2138.              Contents of MS6.EXE (Microsoft C Specific Files)
  2139.  
  2140.                LCOMPILE.BAT      <- Large model - compile *.c
  2141.                SCOMPILE.BAT      <- Small model - compile *.c
  2142.                MCOMPILE.BAT      <- Medium model - compile *.c
  2143.                CCOMPILE.BAT      <- Compact model - compile *.c
  2144.                HCOMPILE.BAT      <- Huge model - compile *.c
  2145.                MCCL.BAT          <- Large model compiler driver
  2146.                MCCS.BAT          <- Small model compiler driver
  2147.                MCCM.BAT          <- Medium model compiler driver
  2148.                MCCC.BAT          <- Compact model compiler driver
  2149.                MCCH.BAT          <- Huge mode compiler driver
  2150.                LOADMS.BAT        <- Link driver for BOSSDEMO
  2151.                LWIN.LIB          <- Large model library
  2152.                SWIN.LIB          <- Small model library
  2153.                MAKELIB.BAT       <- Build LIB from OBJ(s)
  2154.                MAKELIB.CMD       <- Data file for MAKELIB.BAT
  2155.                *.MAK             <- MAKE files - BOSSDEMO, HELLO, SAMPLE
  2156.                WINBOSS.FNS       <- Type checking header
  2157.                ?MSVLIB.OBJ       <- Memory model specific object file
  2158.  
  2159.              Contents of MSQC25.EXE  (Microsoft Quick C Specific Files)
  2160.              Contents of MSQCWIN.EXE (Microsoft Quick C for Windows)
  2161.  
  2162.                SCOMPILE.BAT *    <- Small model - compile *.c
  2163.                LCOMPILE.BAT *    <- Large model - compile *.c
  2164.                MCOMPILE.BAT *    <- Medium model - compile *.c
  2165.                CCOMPILE.BAT *    <- Compact model - compile *.c
  2166.                HCOMPILE.BAT *    <- Huge model - compile *.c
  2167.                MCCL.BAT     *    <- Large model compiler driver
  2168.                MCCS.BAT     *    <- Small model compiler driver
  2169.                MCCM.BAT     *    <- Medium model compiler driver
  2170.                MCCC.BAT     *    <- Compact model compiler driver
  2171.                MCCH.BAT     *    <- Huge model compiler driver
  2172.                LOADMS.BAT   *    <- Link driver for BOSSDEMO
  2173.                LWIN.LIB          <- Large model library
  2174.                SWIN.LIB          <- Small model library
  2175.                MAKELIB.BAT       <- Build LIB from OBJ(s)
  2176.                MAKELIB.CMD       <- Data file for MAKELIB.BAT
  2177.                *.MAK             <- MAKE files - BOSSDEMO, HELLO, SAMPLE
  2178.                WINBOSS.FNS       <- Type checking header
  2179.                ?MSVLIB.OBJ       <- Memory model specific object file
  2180.                   
  2181.                * Not included in MSQCWIN.EXE
  2182.  
  2183.  
  2184.  
  2185.  
  2186.  
  2187.  
  2188.  
  2189.  
  2190.                                                            Page: 35
  2191.                                                      The Window BOSS
  2192.  
  2193.  
  2194.  
  2195.         The SOURCE Distribution Diskette - continued.
  2196.              
  2197.  
  2198.  
  2199.  
  2200.              Contents of ZTC.EXE (Zortech C Specific Files)
  2201.  
  2202.                CCOMPILE.BAT      <- Compact model - compile *.c
  2203.                LCOMPILE.BAT      <- Large model   - compile *.c
  2204.                MCOMPILE.BAT      <- Medium model  - compile *.c
  2205.                SCOMPILE.BAT      <- Small model   - compile *.c
  2206.                LOADZTC.BAT       <- Link driver for BOSSDEMO
  2207.                LWIN.LIB          <- Larger model library
  2208.                MAKELIB.BAT       <- Build LIB file from OBJ(s)
  2209.                MAKELIB.CMD       <- Data file for makelib.bat
  2210.                SWIN.LIB          <- Small model library
  2211.                WINBOSS.FNS       <- Type checking header file
  2212.                ZTCC.BAT          <- Compact model compiler driver
  2213.                ZTCCB.BAT         <- Compact model big compiler driver
  2214.                ZTCL.BAT          <- Large model compiler driver
  2215.                ZTCLB.BAT         <- Large model big compiler driver
  2216.                ZTCM.BAT          <- Medium model compiler driver
  2217.                ZTCMB.BAT         <- Medium model big compiler driver
  2218.                ZTCS.BAT          <- Small model compiler driver
  2219.                ZTCSB.BAT         <- Small model big compiler driver
  2220.                ?MSVLIB.OBJ       <- Memory model specific object files
  2221.  
  2222.              Contents of WATCOM.EXE (Watcom Specific Files)
  2223.  
  2224.                WCCS.BAT          <- Small model compiler driver
  2225.                WCCL.BAT          <- Large model compiler driver
  2226.                WCCM.BAT          <- Medium model compiler driver
  2227.                WCCC.BAT          <- Compact model compiler driver
  2228.                WCCH.BAT          <- Huge model compiler driver
  2229.                CCOMPILE.BAT      <- Compact model - compile *.c
  2230.                LCOMPILE.BAT      <- Large model   - compile *.c
  2231.                MCOMPILE.BAT      <- Medium model  - compile *.c
  2232.                SCOMPILE.BAT      <- Small model   - compile *.c
  2233.                HCOMPILE.BAT      <- Huge model    - compile *.c
  2234.                LOADWAT.BAT       <- Link driver for BOSSDEMO
  2235.                MAKELIB.BAT       <- Build LIB from OBJ(s)
  2236.                MAKELIB.CMD       <- Data file for MAKELIB.BAT
  2237.                SWIN.LIB          <- Small model library
  2238.                LWIN.LIB          <- Large model library
  2239.                WINBOSS.FNS       <- Type checking header
  2240.                ?WCVLIB.OBJ       <- Memory model specific object files
  2241.  
  2242.  
  2243.  
  2244.  
  2245.  
  2246.  
  2247.  
  2248.  
  2249.  
  2250.  
  2251.                                                            Page: 36
  2252.                                                      The Window BOSS
  2253.  
  2254.  
  2255.  
  2256.         The SOURCE Distribution Diskette - continued.
  2257.              
  2258.  
  2259.  
  2260.  
  2261.              Contents of TSC.EXE (TopSpeed C Specific Files)
  2262.  
  2263.                BOSSDEMO.PR       <- MAKE file for BOSSDEMO
  2264.                TSAPP.PR          <- Generic Make file
  2265.                HELLO.PR          <- MAKE file for HELLO
  2266.                SAMPLE.PR         <- MAKE file for SAMPLE
  2267.                MAKECWIN.PR       <- MAKE file for Compact model library
  2268.                MAKELWIN.PR       <- MAKE file for Large model library
  2269.                MAKEMTWI.PR       <- MAKE file for Mthread model library
  2270.                MAKEMWIN.PR       <- MAKE file for Medium model library
  2271.                MAKESWIN.PR       <- MAKE file for Small model library
  2272.                MAKEXWIN.PR       <- MAKE file for Xlarge model library
  2273.                SWIN.LIB          <- Small model library
  2274.                LWIN.LIB          <- Large model library 
  2275.                WINBOSS.FNS       <- Type checking header
  2276.                TSS.BAT           <- Compiler driver batch file
  2277.                SMSVLIB.OBJ       <- Small model specific object file
  2278.                CMSVLIB.OBJ       <- Compact model specific object file
  2279.                MMSVLIB.OBJ       <- Medium model specific object file
  2280.                MTMSVLIB.OBJ      <- Mthread model specific object file
  2281.                LMSVLIB.OBJ       <- Large model specific object file
  2282.                XMSVLIB.OBJ       <- Xlarge model specific object file
  2283.                GENFNS.BAT        <- Instructions for creating "winboss.fns"
  2284.  
  2285.  
  2286.  
  2287.  
  2288.  
  2289.  
  2290.  
  2291.  
  2292.  
  2293.  
  2294.  
  2295.  
  2296.  
  2297.  
  2298.  
  2299.  
  2300.  
  2301.  
  2302.  
  2303.  
  2304.  
  2305.  
  2306.  
  2307.  
  2308.  
  2309.  
  2310.  
  2311.  
  2312.                                                            Page: 37
  2313.                                                      The Window BOSS
  2314.  
  2315.  
  2316.  
  2317.         6. Installation, Compiling, Linking 
  2318.  
  2319.         6.1. Installation
  2320.  
  2321.              By the numbers:
  2322.  
  2323.                 1) MAKE A BACKUP OF ALL DISKS !!!
  2324.  
  2325.                 2) Shareware diskettes - Use LHARC to unarchive 
  2326.                    BOSS_SUP.LZH and the BOSS_LB?.LZH file that 
  2327.                    corresponds to the compiler you normally use. If you 
  2328.                    use more than one compiler then perform the 
  2329.                    installation procedure from start to finish for each 
  2330.                    compiler. For example (Microsoft):
  2331.  
  2332.                           B>A:LHARC E A:BOSS_SUP
  2333.                           B>A:LHARC E A:BOSS_LB1 
  2334.  
  2335.                 2) Source Code diskettes - Depending upon the 
  2336.                    compiler you intend to use, execute one of the 
  2337.                    following: MS6.EXE, MSQC25.EXE, BCPP.EXE, TCPP.EXE, 
  2338.                    LC6.EXE, MIX.EXE, WATCOM.EXE, ZTC.EXE, TSC.EXE,
  2339.                    TC201.EXE or MSQCWIN.EXE. 
  2340.                    If you use more than one compiler then perform the 
  2341.                    installation procedure from start to finish for each 
  2342.                    compiler.
  2343.  
  2344.                 3) Copy the LIBrary that corresponds to the compiler you 
  2345.                    are using onto the disk(s) and/or sub-directories that 
  2346.                    contain your "C" compiler's run time libraries . Be 
  2347.                    sure that the small model library is named "SWIN.LIB" 
  2348.                    (see notes below). The large model library should be 
  2349.                    named "LWIN.LIB". MIX Power C libraries are named 
  2350.                    SWIN.MIX, MWIN.MIX and LWIN.MIX.
  2351.  
  2352.  
  2353.                    ** Shareware Users Note ** - The examples used in the 
  2354.                    documentation assume the library's name to be SWIN.LIB 
  2355.                    for the small memory model (SWIN.MIX for MIX Power C). 
  2356.                    You should rename the library you extracted to conform 
  2357.                    to this naming convention to eliminate any possible 
  2358.                    confusion.  For example:
  2359.  
  2360.                             B:>RENAME SMSC6.LIB SWIN.LIB
  2361.  
  2362.                 4) Copy "WINBOSS.H", "WINBOSS.FNS", and "WINBOSS.EXT" to 
  2363.                    the disk(s) and/or sub-directories that contain your 
  2364.                    "C" compiler's include files. 
  2365.  
  2366.  
  2367.  
  2368.  
  2369.  
  2370.  
  2371.  
  2372.  
  2373.                                                            Page: 38
  2374.                                                      The Window BOSS
  2375.  
  2376.  
  2377.  
  2378.         Installation - continued.
  2379.  
  2380.  
  2381.  
  2382.                 5) Copy (or rename) the small memory model compiler 
  2383.                    driver batch file that corresponds to the compiler you 
  2384.                    are using to:
  2385.  
  2386.                                      CSM.BAT
  2387.  
  2388.                 5) Read the "Compiling", "Linking", and "General Notes" 
  2389.                    sections of this manual.  The "General Notes" section 
  2390.                    has across the board information that everyone should 
  2391.                    review and compiler specific tips that are very 
  2392.                    important.
  2393.  
  2394.                 6) Suggestion - After installing The Window BOSS, build 
  2395.                    the HELLO program using either the command line 
  2396.                    compiler or your integrated environment.  If you have 
  2397.                    any difficulty, review both the "Hints on Resolving 
  2398.                    Common Problems" and "General Notes" section of this 
  2399.                    manual.  Pay special attention to the notes on your 
  2400.                    specific compiler.
  2401.  
  2402.                 7) Remember there is no magic to using The Window BOSS. 
  2403.                    It's simple!!
  2404.  
  2405.         6.1.1. Installation Notes and Cautions
  2406.  
  2407.           1) If WINBOSS.FNS is not contained in the archive for your 
  2408.              compiler, or is not present after you unarchive the required 
  2409.              files, copy (or rename) WINDOWS.FN6, WINDOWS.FNB, 
  2410.              WINDOWS.FNZ, WINDOWS.FNT to WINBOSS.FNS according to the 
  2411.              following table:
  2412.  
  2413.                        Compiler                 File
  2414.                        ---------                -----
  2415.                        All Microsoft            WINDOWS.FN6
  2416.                        All Borland              WINDOWS.FNB
  2417.                        Lattice                  WINDOWS.FNB
  2418.                        Mix Power C              WINDOWS.FN6
  2419.                        WATCOM                   WINDOWS.FNB
  2420.                        TopSpeed C               WINDOWS.FNT
  2421.                        Zortech                  WINDOWS.FNZ
  2422.  
  2423.           2) If you are installing The Window Boss for multiple compilers 
  2424.              it is imperative that you complete the installation 
  2425.              procedure from start to finish for each compiler.  This will 
  2426.              eliminate any potential problems due to common names across 
  2427.              compilers (WINBOSS.FNS, SWIN.LIB...).
  2428.  
  2429.  
  2430.  
  2431.  
  2432.  
  2433.  
  2434.                                                            Page: 39
  2435.                                                      The Window BOSS
  2436.  
  2437.  
  2438.  
  2439.         Installation/Compiling/Linking - continued.
  2440.  
  2441.  
  2442.  
  2443.         6.2. Compiling (Command line)
  2444.  
  2445.              Compile your application source code in the following 
  2446.              manner:
  2447.  
  2448.                                   C>csm hello
  2449.  
  2450.              Notes:
  2451.  
  2452.                ** ALL compilers should be invoked with the compiler 
  2453.                driver batch files supplied with The Window BOSS.  Some 
  2454.                compilers require ".c" to be added to the name of the 
  2455.                source file e.g. "csm hello.c".  The examples in this 
  2456.                manual assume you are creating small memory model 
  2457.                programs.
  2458.  
  2459.                The Window BOSS includes "winboss.h", "winboss.fns", and 
  2460.                "winboss.ext".  These files can be placed with your 
  2461.                compiler's other INCLUDE files or they can remain in the 
  2462.                same directory as your "C" programs.  Depending upon your 
  2463.                installation, you may have to edit HELLO.C and/or 
  2464.                WINBOSS.H to follow the "" .vs. <> include file 
  2465.                convention.  All of BOSS's includes are of the form:
  2466.  
  2467.                              #include "include_file_name"
  2468.  
  2469.                If you examine CSM.BAT you will notice some command line 
  2470.                parameters that are passed to your compiler.  These 
  2471.                command line parameters are an absolute requirement and 
  2472.                must always be present.  They are used by "winboss.h" to 
  2473.                set various conditions required by your specific compiler.
  2474.  
  2475.  
  2476.  
  2477.  
  2478.  
  2479.  
  2480.  
  2481.  
  2482.  
  2483.  
  2484.  
  2485.  
  2486.  
  2487.  
  2488.  
  2489.  
  2490.  
  2491.  
  2492.  
  2493.  
  2494.  
  2495.                                                            Page: 40
  2496.                                                      The Window BOSS
  2497.  
  2498.  
  2499.  
  2500.         Installation/Compiling/Linking - continued.
  2501.  
  2502.  
  2503.  
  2504.         6.3. Linking (Command line)
  2505.  
  2506.              Simply specify the ?WIN.LIB file that corresponds to the 
  2507.              compiler/memory model you are using.  Don't forget to 
  2508.              include your compiler's runtime library as well. The 
  2509.              following examples demonstrate basic linking using the small 
  2510.              model library (medium for MIX Power C):
  2511.  
  2512.                 Lattice 
  2513.                   lmb hello,hello,,swin+lcr;                       
  2514.  
  2515.                 Microsoft C
  2516.                   link hello,hello,,swin;                         
  2517.  
  2518.                 Microsoft QuickC
  2519.                   qlink hello,hello,,swin                         
  2520.                 
  2521.                 Borland
  2522.                   tlink /c c0s hello,hello,hello,swin emu maths cs
  2523.  
  2524.                 Mix Power C                          
  2525.                   pcl hello;swin [5k,40k,0]
  2526.  
  2527.                 Watcom
  2528.                   wlink file hello library swin,maths,clibs
  2529.  
  2530.                 ZORTECH
  2531.                   blink hello,hello,,swin
  2532.  
  2533.                 TOPSPEED
  2534.                       
  2535.                   ts hello /m
  2536.  
  2537.                      ** Read the "TopSpeed" section of "General Notes"
  2538.  
  2539.  
  2540.  
  2541.  
  2542.  
  2543.  
  2544.  
  2545.  
  2546.  
  2547.  
  2548.  
  2549.  
  2550.  
  2551.  
  2552.  
  2553.  
  2554.  
  2555.  
  2556.                                                            Page: 41
  2557.                                                      The Window BOSS
  2558.  
  2559.  
  2560.  
  2561.         Installation/Compiling/Linking - continued.
  2562.  
  2563.  
  2564.  
  2565.         Linking Notes:
  2566.  
  2567.         The linking examples may have to be modified to include the 
  2568.         complete path specifiers for each library.  For example:
  2569.  
  2570.                        link hello,hello,,c:\msc6\lib\swin
  2571.  
  2572.         Fixup offset errors are always the result attempting of to link 
  2573.         code compiled under one memory model with libraries created for 
  2574.         use with another memory model.
  2575.  
  2576.         Unresolved externals can be caused by missing user functions, 
  2577.         missing library functions, linking command errors, missing 
  2578.         project files, missing MAKE files, or attempting to link a non 
  2579.         conforming library. Misplaced commas on the command line and C 
  2580.         code typing errors are the most common problems.  In the case of 
  2581.         integrated environment fans (Quick C, MSC PWB, Turbo C) it is 
  2582.         almost always due to forgetting to SET THE PROGRAM LIST to 
  2583.         include The Window BOSS library or, in the case of Turbo C, 
  2584.         forgetting to create a project file that includes an entry for 
  2585.         The Window BOSS library.
  2586.  
  2587.  
  2588.  
  2589.  
  2590.  
  2591.  
  2592.  
  2593.  
  2594.  
  2595.  
  2596.  
  2597.  
  2598.  
  2599.  
  2600.  
  2601.  
  2602.  
  2603.  
  2604.  
  2605.  
  2606.  
  2607.  
  2608.  
  2609.  
  2610.  
  2611.  
  2612.  
  2613.  
  2614.  
  2615.  
  2616.  
  2617.                                                            Page: 42
  2618.                                                      The Window BOSS
  2619.  
  2620.  
  2621.  
  2622.         7. General and Compiler Specific Notes
  2623.  
  2624.         Source code is provided for all of the high level data entry 
  2625.         functions, the help system, and the popup menu functions.  This 
  2626.         is done so that you (1) have a wide variety of templates to base 
  2627.         any local data entry functions on and (2) have the source to the 
  2628.         code to those functions (help & popup) which are commonly changed 
  2629.         to suit individual taste.
  2630.  
  2631.         WN_BIOS.C and the various assembler files (*.ASM) contain all of 
  2632.         the BIOS interface functions.  Only v_kstat(), v_border(), 
  2633.         _vidblt(), and xferdata() are written in assembly language!!  
  2634.  
  2635.         This one is REAL important - Both the C and assembly functions 
  2636.         make very heavy use of pointers.  The code contains numerous 
  2637.         checks to ensure that memory, outside of that in use by the 
  2638.         program, is not corrupted.  If you attempt to do something that 
  2639.         would cause memory to be corrupted an error message will appear 
  2640.         and your program will exit.  This message will usually say that a 
  2641.         bad handle was passed to some function.  This error is normally 
  2642.         caused by a stray pointer in the application code!  Check all 
  2643.         your pointer operations.  Doing strcpy's to arrays with 
  2644.         insufficient space will always cause this type of problem.
  2645.  
  2646.         Generally speaking, the members of the window control block 
  2647.         (refer to winboss.h) should not be modified unless you are 
  2648.         familiar with how they are used by the various functions.  We 
  2649.         suggest you obtain a hard copy of "winboss.h" and review it even 
  2650.         if you don't have any intentions of modifying the code.  There is 
  2651.         a great deal of information contained in "winboss.h" that you may 
  2652.         find helpful when writing your application.
  2653.  
  2654.         Although the routines appear to support the multi page 
  2655.         capabilities of the IBM Color Card, actual support of this 
  2656.         feature has not been implemented.  Invoking the functions with 
  2657.         references to video pages other than than those documented might 
  2658.         produce interesting, but undesired results.  
  2659.  
  2660.         Programs such as Wordstar and Lotus change the video mode when 
  2661.         they run.  If your system is equipped with a color monitor and 
  2662.         your windows are appearing in black and white, issue a call to 
  2663.         v_smode to set the video mode to 3.  Alternatively, you can use 
  2664.         the "MODE CO80" command at DOS level before you run your 
  2665.         application.  
  2666.  
  2667.         The best way to manipulate the method by which windows are 
  2668.         updated is via the wn_dmode() function.  Calling wn_dmode(PAINT) 
  2669.         causes the image to be painted while wn_dmode(FLASH) causes the 
  2670.         image to be flash updated.  Flash updating is the preferred 
  2671.         (default) method.  Please keep in mind that windows are always 
  2672.         flash updated on monochrome systems. 
  2673.  
  2674.  
  2675.  
  2676.  
  2677.  
  2678.                                                            Page: 43
  2679.                                                      The Window BOSS
  2680.  
  2681.  
  2682.  
  2683.         7.1. Upgrading - Existing Applications Impact
  2684.  
  2685.         If you are upgrading from a previous version of The Window BOSS 
  2686.         be sure to re-compile and re-link your application.  This will 
  2687.         eliminate the possibility of any "unusual" problems.
  2688.  
  2689.         7.2. Current Compilers & Libraries
  2690.  
  2691.         The distribution libraries were created on an IBMPC/AT under DOS 
  2692.         5.0 using, Lattice 6.05, Microsoft 6.0a, Microsoft QuickC 2.51, 
  2693.         Microsoft QuickC for Windows 1.0, Borland Turbo C 2.01, Borland 
  2694.         Turbo C++ 1.01, Borland C++ 3.0, Watcom C 8.5, Mix Power C 2.1.0, 
  2695.         Zortech 2.10, and TopSpeed 3.02. Compatability and/or support for 
  2696.         other compilers or versions is not clamied or provided.
  2697.  
  2698.         Test hardware: IBMPC/XT/AT, PS/2, with IBM Monochrome, CGA, EGA, 
  2699.         and VGA video adapters.  Additionally, a wide variety of clones 
  2700.         (8088, 8086, 80186, 80286, 80386) with brand name and noname 
  2701.         components were also tested.
  2702.  
  2703.         Several of the compilers support a compile time command line 
  2704.         parameter that results in structures being byte aligned instead 
  2705.         of word aligned.  In all cases, the compiler default option was 
  2706.         used to compile the modules in the various libraries.
  2707.  
  2708.         7.3. EGA & VGA Expanded Line & Column Modes
  2709.  
  2710.         The Window BOSS supports the Expanded Line and Column modes of 
  2711.         both the EGA and VGA video adapters.  However, in order to 
  2712.         preserve The Window BOSS's device independence you will have to 
  2713.         do a little extra work if you intend to write an application that 
  2714.         is going to take advantage of one of these expanded modes.  The 
  2715.         rules are quite simple.  Your application must remain in one 
  2716.         mode.  It can be (25 x 80), (80 x 132), (80 x 43), (80 x 50), or 
  2717.         whatever size your adapter supports.  The adapter must be in the 
  2718.         mode you chose prior to calling ANY of The Window BOSS functions.  
  2719.         WN_PSINIT() must be called first, called only once, and be called 
  2720.         with parameters that reflect the physical screen size that your 
  2721.         application is going to use.  That's all there is to it!  
  2722.  
  2723.         7.4. Terminate and Stay Resident (TSR) Programming
  2724.  
  2725.         The Window BOSS has been successfully incorporated in TSR 
  2726.         programs. Due to the complexities involved in writing and 
  2727.         resolving conflicts associated with TSR(s) and the lack of any 
  2728.         real standards for TSR(s) Star Guidance Consulting, Inc. can not 
  2729.         provide any form of support or assistance for TSR related 
  2730.         problems.  We will, however, work with you in resolving any 
  2731.         problem you can replicate when the program is not resident.
  2732.  
  2733.  
  2734.  
  2735.  
  2736.  
  2737.  
  2738.  
  2739.                                                            Page: 44
  2740.                                                      The Window BOSS
  2741.  
  2742.  
  2743.  
  2744.         General Notes - continued.
  2745.  
  2746.  
  2747.         7.5. Important Globals
  2748.  
  2749.         Several global symbols are used by the various functions. All are 
  2750.         defined in "windows.c" and referenced in "winboss.ext".  A few 
  2751.         are worthy of special mention:
  2752.  
  2753.                                  int wn_dmaflg;
  2754.                                  int wn_sbit;
  2755.                                  int wns_escape;
  2756.  
  2757.         7.5.1. wns_dmaflg
  2758.  
  2759.              wn_dmaflg when TRUE enables direct writes into video ram. 
  2760.              This is the default setting and should work in all cases.  
  2761.              Setting wn_dmaflg to FALSE will disable these direct writes. 
  2762.              When wn_dmaflg is FALSE the BIOS video routines are used. 
  2763.              This results in slower screen updates.  However, this method 
  2764.              does have the advantage of being considered "well behaved" 
  2765.              by IBM's Topview, Microsoft's Windows, and DESQ.  
  2766.              
  2767.         7.5.2. wn_sbit
  2768.  
  2769.              wn_sbit controls the window refresh rate on systems with  
  2770.              color cards.  When set to SLOW (defined in winboss.h), 
  2771.              window displays will appear to be painted on the screen 
  2772.              rather than flash displayed. This is the default value.  
  2773.              Setting wn_sbit to FAST enables flash displays. Artistic use 
  2774.              of wn_sbit can give your application that extra visual 
  2775.              touch. Experiment!
  2776.  
  2777.              From a performance standpoint, the fastest (flicker & snow 
  2778.              free) screen updates will occur with wn_dmaflg=TRUE 
  2779.              (default) and wn_sbit=FAST (default).  The key words here 
  2780.              are flicker and snow free.  Scrolling speed can be 
  2781.              increased, with a proportional increase in flicker 
  2782.              (perhaps), by using wn_scroll() function to set the 
  2783.              scrolling method for the window to BIOS.  This technique 
  2784.              will provide the fastest screen updates and scrolling on 
  2785.              color systems.
  2786.  
  2787.          7.5.3. wns_escape
  2788.  
  2789.              wns_escape is set to TRUE whenever wn_input detects that the 
  2790.              escape key has been pressed.  Since wn_input is the 
  2791.              underlying logic for the entire data entry package, 
  2792.              knowledge of this global may help you manage your data entry 
  2793.              activities better.  For example, you may want to follow one 
  2794.              logic path if data entry completed normally and another if 
  2795.              data entry was terminated because the escape key was 
  2796.              pressed.
  2797.  
  2798.  
  2799.  
  2800.                                                            Page: 45
  2801.                                                      The Window BOSS
  2802.  
  2803.  
  2804.  
  2805.         General Notes - continued.
  2806.  
  2807.  
  2808.  
  2809.         7.6. Microsoft C
  2810.  
  2811.         Some large model programs may require a stack greater than 4096 
  2812.         bytes.
  2813.  
  2814.         PWB and Integrated Development Environment fans take note - If 
  2815.         program and/or data space is at a premium - disabling debugging 
  2816.         can sometimes restore significant program and/or data space.  
  2817.  
  2818.         Microsoft Version 6.XX Programmer Workbench 
  2819.  
  2820.         PWB fans must define "MSCV6=1" in the defines dialogue box.  Do 
  2821.         this by selecting "OPTIONS" then "C COMPILER OPTIONS".  
  2822.  
  2823.         The same rules that apply to the creation of MAKE files for Quick 
  2824.         C (SETTING THE PROGRAM LIST) also apply.  The program list can be 
  2825.         set by selecting the MAKE dialog box, then SET PROGRAM LIST.  Be 
  2826.         sure to include an explicit entry for The Window BOSS library.
  2827.  
  2828.         7.7. Microsoft QuickC
  2829.  
  2830.         Microsoft QuickC - All Integrated Development Environment users 
  2831.         MUST create MAKe files in order to be able to create EXEcutable 
  2832.         programs from within the Developmental Environment.  The MAKe
  2833.         file must contain the names of all of the programs that comprise 
  2834.         the application along with specific entries for all 3rd party 
  2835.         libraries being used.  In the case of 3rd party libraries, the 
  2836.         complete path specification for the library must be provided 
  2837.         (e.g. c:\msc\lib\swin.lib).  The MAKe file is created when you set 
  2838.         the program list.  Select the MAKE dialog BOX, then SET PROGRAM 
  2839.         LIST. Follow the standard rules for the creation of "MAK" files.
  2840.  
  2841.         QuickC 2.5 Integrated Development Environment
  2842.  
  2843.         MSCV6=1 must be defined in "COMPILER FLAGS" "DEFINES" dialog box 
  2844.         (select OPTIONS, MAKE, COMPILER FLAGS, then fill in DEFINES with 
  2845.         MSCV6=1).
  2846.  
  2847.  
  2848.  
  2849.  
  2850.  
  2851.  
  2852.  
  2853.  
  2854.  
  2855.  
  2856.  
  2857.  
  2858.  
  2859.  
  2860.  
  2861.                                                            Page: 46
  2862.                                                      The Window BOSS
  2863.  
  2864.  
  2865.  
  2866.         General Notes - continued.
  2867.  
  2868.  
  2869.  
  2870.         7.8. Microsoft Quick C for Windows
  2871.  
  2872.         Microsoft Quick C for Windows - All users MUST create MAKe files 
  2873.         in order to be able to create EXEcutable programs from within the 
  2874.         Q/C for Windows Developmental Environment.  The MAKe file must 
  2875.         contain the names of all of the programs that comprise the 
  2876.         application along with specific entries for all 3rd party 
  2877.         libraries being used.  In the case of 3rd party libraries, the 
  2878.         complete path specification for the library must be provided 
  2879.         (e.g. c:\msc\lib\swin.lib).  MAKe files are created and edited 
  2880.         from under the PROJECT pulldown.
  2881.  
  2882.         The Window BOSS functions can only be used in a DOS application 
  2883.         at this time.  To create DOS applications do the following:
  2884.  
  2885.              1. Select OPTIONS
  2886.              2.   Select PROJECT
  2887.              3.    Set program type to DOS.EXE
  2888.              4.    Set build mode to RELEASE
  2889.              5.    Select COMPILE from under Customize Build Options
  2890.              6.      Select OPTIONS>>
  2891.              7.        Enter MSCV6=1 in the defines dialog box
  2892.              8         Press ENTER
  2893.              9.      Click OK
  2894.  
  2895.  
  2896.  
  2897.  
  2898.  
  2899.  
  2900.  
  2901.  
  2902.  
  2903.  
  2904.  
  2905.  
  2906.  
  2907.  
  2908.  
  2909.  
  2910.  
  2911.  
  2912.  
  2913.  
  2914.  
  2915.  
  2916.  
  2917.  
  2918.  
  2919.  
  2920.  
  2921.  
  2922.                                                            Page: 47
  2923.                                                      The Window BOSS
  2924.  
  2925.  
  2926.  
  2927.         General Notes - continued.
  2928.  
  2929.  
  2930.  
  2931.         7.9. Borland Turbo C, Borland C++ and Borland Turbo C++
  2932.  
  2933.         IDE (Integrated Development Environment) - Window BOSS users who 
  2934.         prefer the IDE over the command line compiler *MAY* have to 
  2935.         disable source level debugging when attempting to run their 
  2936.         applications from within the IDE via ^F9.  There are also 
  2937.         problems with running Window BOSS applications from within the 
  2938.         IDE when Sidekick (1.56A) is loaded.  Borland has been notified 
  2939.         of these problems (7/19/90).  PLEASE KEEP IN MIND THAT THESE 
  2940.         PROBLEMS ONLY APPLY WHEN USING THE IDE - THEY DO NOT IMPACT THE 
  2941.         FINAL APPLICATION.
  2942.  
  2943.           To disable source level debugging from within the IDE, select 
  2944.           Options, then Debugger, then set "Source Debugging" to NONE.  
  2945.           It may also help to disable debugging information from being 
  2946.           placed in the OBJ files.  This is done by selecting Options, 
  2947.           then Compiler, then Code Generation, then More - then disable 
  2948.           "Debug info in OBJs".
  2949.  
  2950.         IDE users MUST create PROJECT files in order to be able to create 
  2951.         EXEcutable programs from within the Integrated Environment.  The 
  2952.         PROJECT file must contain the names of all of the programs that 
  2953.         comprise the application along with specific entries for all 3rd 
  2954.         party libraries being used.  In the case of 3rd party libraries, 
  2955.         the complete path specification for the library must be provided 
  2956.         (e.g. c:\turboc\lib\swin.lib).
  2957.  
  2958.         7.10. MIX Power C
  2959.  
  2960.         Mix Power C - The linker should always be told the amount of 
  2961.         memory to be assigned to the stack, heap, and far heap.  Since 
  2962.         The Window BOSS uses both heap and far memory outside of your 
  2963.         program, it is imperative that PCL be invoked with reasonable 
  2964.         parameters. Typical values are [5k,40k,0] or [5k,40k,100k]. Refer 
  2965.         to the chapter on the Mix Linker in the Power C manual.
  2966.  
  2967.  
  2968.  
  2969.  
  2970.  
  2971.  
  2972.  
  2973.  
  2974.  
  2975.  
  2976.  
  2977.  
  2978.  
  2979.  
  2980.  
  2981.  
  2982.  
  2983.                                                            Page: 48
  2984.                                                      The Window BOSS
  2985.  
  2986.  
  2987.  
  2988.         General Notes - continued.
  2989.  
  2990.  
  2991.  
  2992.         7.11. TopSpeed C
  2993.  
  2994.         TopSpeed C - The TopSpeed compiler requires all applications to 
  2995.         be compiled and linked via PROJECT (MAKE) files.  The Window BOSS 
  2996.         library must be included in all project files that reference 
  2997.         applications that use The Window BOSS.  The Window BOSS libraries 
  2998.         themselves should be placed in the directory that TopSpeed C uses 
  2999.         for its run time libraries. The following example (small memory 
  3000.         model) should help clarify this. 
  3001.  
  3002.           Application Directory                TopSpeed C LIB Directory
  3003.           ---------------------             |  ------------------------ 
  3004.           (C:\SOURCE)                       |  (C:\TS\LIB)
  3005.                                             |
  3006.            HELLO.C   <-Application Code     |  SWIN.LIB  <- Library 
  3007.            HELLO.PR  <-Application PRJ File |
  3008.                                             |
  3009.            WINBOSS.H   \  Standard Window   |
  3010.            WINBOSS.FNS  > BOSS #include     |
  3011.            WINBOSS.EXT /  files.            |
  3012.  
  3013.         Application project files must include a memory model specific 
  3014.         "model" directive and a link pragma for The Window BOSS library.  
  3015.         For example, the HELLO.PRJ file for the small memory model is as 
  3016.         follows:
  3017.  
  3018.                              #system auto exe
  3019.                              #model  small
  3020.                              #pragma link (swin.lib)
  3021.                              #compile %main
  3022.                              #link %prjname
  3023.  
  3024.         The Shareware and Source media kit contain a generic application 
  3025.         project file named "TSAPP.PRJ".  "TSAPP.PRJ" can be copied to 
  3026.         "HELLO.PRJ", "BOSSDEMO.PRJ", and "SAMPLE.PRJ".  This will allow 
  3027.         you to test and experiment with these programs using either the 
  3028.         command line compiler or the integrated environment.  Application 
  3029.         project files can also be created and/or edited under TopSpeed's 
  3030.         integrated environment by using the "Project" pulldown menu.
  3031.  
  3032.         Project files for the various Window BOSS libraries 
  3033.         (MAKESWIN.PR,...MAKELWIN.PR) are provided as part of the Window 
  3034.         BOSS Source media kit. Depending on the memory model(s) you use, 
  3035.         one, or more, of these files must be present in the same 
  3036.         directory as your application code and application project file.
  3037.  
  3038.  
  3039.  
  3040.  
  3041.  
  3042.  
  3043.  
  3044.                                                            Page: 49
  3045.                                                      The Window BOSS
  3046.  
  3047.  
  3048.  
  3049.         General Notes - continued.
  3050.  
  3051.  
  3052.  
  3053.         7.12. Zortech C
  3054.  
  3055.         Zortech C - ZORLIB (as distributed with version 2.0 of Zortech C) 
  3056.         can not produce a correctly formatted library of The Window BOSS 
  3057.         functions.  Microsoft's library manager LIB was used to create 
  3058.         the libraries distributed with The Window BOSS.  Please do not 
  3059.         attempt to recreate or update any of The Window BOSS libraries 
  3060.         with ZORLIB.  Zortech has been notified of the problem.
  3061.  
  3062.         BOSSDEMO.C must be compiled with the BIG compiler.
  3063.  
  3064.         7.13. Lattice C
  3065.  
  3066.         Lattice C - Lattice large model programs sometimes require the 
  3067.         heap to be set to a minimum value.  This can be accomplished by 
  3068.         setting _MNEED or specifying the stack and heap size at run time. 
  3069.         A minimum heap size of 32k will usually satisfy most 
  3070.         applications. REMEMBER: This is for the LARGE model only.  Refer 
  3071.         to the Lattice reference manuals for further information on 
  3072.         setting the stack and heap size.
  3073.  
  3074.         Fixup offset errors for the text segment of vlib.asm are normal 
  3075.         when linking HUGE memory model programs under version 6.05.
  3076.  
  3077.         7.14. Feedback
  3078.  
  3079.         PLEASE - Pass along your comments.  The Window BOSS is your tool.  
  3080.         If you find any logic errors let us know.  We are committed to 
  3081.         making The Window BOSS the best price performer available.  Call, 
  3082.         write, or if you prefer, you can reach us via CompuServe, GENIE, 
  3083.         or BIX.  Our CompuServe electronic mail ID is [71565,1001], our 
  3084.         GENIE mail address is "MONGELLUZZO", our BIX NAME is 
  3085.         "pmongelluzzo". Remember, there is no reason to sit, steam, or 
  3086.         complain to those who can not provide any real form of support.  
  3087.         Lastly, if you use The Window BOSS, register your copy.  The 
  3088.         Shareware System will only work if you support it!
  3089.  
  3090.  
  3091.  
  3092.  
  3093.  
  3094.  
  3095.  
  3096.  
  3097.  
  3098.  
  3099.  
  3100.  
  3101.  
  3102.  
  3103.  
  3104.  
  3105.                                                            Page: 50
  3106.                                                      The Window BOSS
  3107.  
  3108.  
  3109.  
  3110.         8. Hints on Resolving Common Problems
  3111.  
  3112.         8.1. Unresolved Externals
  3113.  
  3114.         Unresolved externals are most common with the programming 
  3115.         environments of Borland C++, Borland Turbo C++, Microsoft PWB, 
  3116.         and Microsoft Quick C.  All of these programming environments 
  3117.         require "program lists" or "make files".  This type of error can 
  3118.         also be caused by not explicitly specifying a Window BOSS library 
  3119.         on the link command line.  All linkers must have explicit 
  3120.         knowledge of what 3rd party libraries are to be linked with the 
  3121.         compiler libraries and your applications object files. This 
  3122.         problem is usually resolved by creating a program list or make 
  3123.         file that includes a explicit reference to one of The Window BOSS 
  3124.         libraries, or explicitly specifying the correct Window BOSS 
  3125.         library as part of the link command line.  Refer to your compiler 
  3126.         documentation for further information.
  3127.  
  3128.         8.2. Fixup Offset Errors
  3129.  
  3130.         These are always the result of attempting to link code compiled 
  3131.         under one memory model with libraries created for use with 
  3132.         another memory model.
  3133.  
  3134.         8.3. Bad Handle Exits
  3135.  
  3136.         Both the C and assembly functions make very heavy use of 
  3137.         pointers.  The code contains numerous checks to ensure that 
  3138.         memory does not get corrupted or randomly written over.  This 
  3139.         error is normally caused by a stray pointer in the application 
  3140.         code!  Check and recheck all of your pointer operations.  Doing 
  3141.         strcpy's to arrays with insufficient space will always cause this 
  3142.         type of problem.
  3143.  
  3144.         Oftentimes switching from the small memory model to large memory 
  3145.         model will initially produce these errors in programs that were 
  3146.         working fine in the small model.  In nearly every case the 
  3147.         problem was traced to a stray pointer or improper pointer usage.
  3148.  
  3149.         8.4. Fatal Compilation Errors
  3150.  
  3151.         All command line compilers should be invoked with the compiler 
  3152.         driver batch files provided as part of The Window BOSS.  This 
  3153.         insures the compiler specific compile time parameters are 
  3154.         specified correctly.  If you elect to use you own method, be sure 
  3155.         to include ALL of the command line parameters that are specified 
  3156.         in the provided batch files.  
  3157.  
  3158.         8.5. Missing Files
  3159.  
  3160.         Remember, the documentation covers two media kits (Shareware and 
  3161.         Source) and neither kit contains ALL files.  If you are missing 
  3162.         files that are listed for your media kit, please contact us.
  3163.  
  3164.  
  3165.  
  3166.                                                            Page: 51
  3167.                                                      The Window BOSS
  3168.  
  3169.  
  3170.  
  3171.         Hints on Resolving Common Problems - continued.
  3172.  
  3173.  
  3174.  
  3175.         8.6. Linking Errors
  3176.  
  3177.         (A) See "Unresolved Externals" above. (B) Most linking errors are 
  3178.         the result of; (1) forgetting to specify the library to link, (2) 
  3179.         specifying the wrong library, or (3) command line syntax errors.  
  3180.         Double check your compiler documentation for the proper way to 
  3181.         link "other libraries" or "3rd party libraries".
  3182.  
  3183.         8.7. Other Problems
  3184.  
  3185.         Double check this manual for proper usage, review your compiler 
  3186.         documentation, then contact us.
  3187.  
  3188.  
  3189.  
  3190.  
  3191.  
  3192.  
  3193.  
  3194.  
  3195.  
  3196.  
  3197.  
  3198.  
  3199.  
  3200.  
  3201.  
  3202.  
  3203.  
  3204.  
  3205.  
  3206.  
  3207.  
  3208.  
  3209.  
  3210.  
  3211.  
  3212.  
  3213.  
  3214.  
  3215.  
  3216.  
  3217.  
  3218.  
  3219.  
  3220.  
  3221.  
  3222.  
  3223.  
  3224.  
  3225.  
  3226.  
  3227.                                                            Page: 52
  3228.                                                      The Window BOSS
  3229.  
  3230.  
  3231.  
  3232.         9. Making Changes
  3233.  
  3234.         Incorporating local modifications or enhancements is, in part, 
  3235.         why you acquired the source code to begin with.  Incorporating 
  3236.         your modifications or enhancements should be be a relatively 
  3237.         straight forward task provided you follow the basic guidelines 
  3238.         outlined in the subsequent sections of this manual.  
  3239.  
  3240.         If you feel you have developed a significant enhancement that is 
  3241.         both well documented and written please let us know.  We have, 
  3242.         from time to time, incorporated customer supplied enhancements to 
  3243.         our products.  Contact us for further details.
  3244.  
  3245.         9.1. General Considerations
  3246.  
  3247.         First, be sure that you are familiar with the existing 
  3248.         conventions and compiler specific feature test switches. Refer to 
  3249.         the various BATch files for specific examples of compiler 
  3250.         specific defines (etc.).  
  3251.  
  3252.         Please note that we assume that you have installed your compiler 
  3253.         exactly as suggested in the compiler's manual.  This includes 
  3254.         suggested sub-directories, PATH specifiers, and environment 
  3255.         setup.  Check and double check the "include" file requirements - 
  3256.         make sure you have the required files and that they have been 
  3257.         edited to correspond to the memory model you are writing code 
  3258.         for. Creating code that compiles under numerous compilers is not 
  3259.         an easy task.  If you run into problems review your compilers 
  3260.         documentation and browse through the batch files provided.  If 
  3261.         you still have problems - call!  
  3262.  
  3263.         Carefully review the area of code you wish to modify or enhance - 
  3264.         be sure to get a complete understanding of what's currently going 
  3265.         on before you add your own code.  With the exception of the ASM 
  3266.         files, compiler and memory model specific feature test switches 
  3267.         are specified on the command line. 
  3268.  
  3269.         Depending upon the compiler being used, several warning errors 
  3270.         will be generated.  Warnings created by the unmodified 
  3271.         distribution code can be safely ignored - all others should be 
  3272.         investigated.
  3273.  
  3274.         A note of caution... PC/MS-DOS Version 2.XX's LINK can complain 
  3275.         if you build a new library that takes advantage of later LINK 
  3276.         enhancements.  If this occurs, you can (1) upgrade to DOS 3.1++ 
  3277.         or, (2) get a librarian that isn't so smart!!  We suggest going 
  3278.         to the later revision of DOS.
  3279.  
  3280.  
  3281.  
  3282.  
  3283.  
  3284.  
  3285.  
  3286.  
  3287.  
  3288.                                                            Page: 53
  3289.                                                      The Window BOSS
  3290.  
  3291.  
  3292.  
  3293.         Making Changes - continued.
  3294.  
  3295.  
  3296.         9.2. Specific Changes to Consider
  3297.  
  3298.         Both the Shareware and Source versions of The Window BOSS and 
  3299.         Data Clerk are supplied with the numerous common source code 
  3300.         files.
  3301.  
  3302.         The source code was provided to serve as the basis upon which you 
  3303.         could develop your own enhancements to the product and to provide 
  3304.         you with those modules which may need to be modified for your 
  3305.         particular application.  The latter is true of wn_frmget, 
  3306.         wn_iemsg, and wn_ihmsg.  You should consider modifying these 
  3307.         routines if you want to change the way in which data entry forms 
  3308.         are handled when completed (wn_frmget), the way in which data 
  3309.         entry field help messages are displayed  (wn_ihmsg), or the way 
  3310.         in which data entry field error messages are displayed 
  3311.         (wn_iemsg).
  3312.  
  3313.         In the case of wn_frmget, the code to modify is at the tail end 
  3314.         of the file and is clearly labeled.  Data entry Help messages are 
  3315.         displayed by wn_ihmsg whenever the HELP key is depressed.  Data 
  3316.         entry error messages are displayed by wn_iemsg whenever 
  3317.         validation for a particular field fails.  Refer to the source 
  3318.         code files and the descriptions of these functions in the 
  3319.         function synopsis section of this document.
  3320.  
  3321.  
  3322.  
  3323.  
  3324.  
  3325.  
  3326.  
  3327.  
  3328.  
  3329.  
  3330.  
  3331.  
  3332.  
  3333.  
  3334.  
  3335.  
  3336.  
  3337.  
  3338.  
  3339.  
  3340.  
  3341.  
  3342.  
  3343.  
  3344.  
  3345.  
  3346.  
  3347.  
  3348.  
  3349.                                                            Page: 54
  3350.                                                      The Window BOSS
  3351.  
  3352.  
  3353.  
  3354.         Making Changes - continued.
  3355.  
  3356.  
  3357.         9.3. TopSpeed C 
  3358.  
  3359.         If you do not have the Source media kit or are making a limited 
  3360.         number of changes or are testing a small number of changes, the 
  3361.         best approach to take is to modify your application's project 
  3362.         file to include an entry for the modified source code.  The 
  3363.         example below contains an entry for a locally modified version of 
  3364.         wn_frmget.  It is important to note that this project file will 
  3365.         cause the compiler to generate a warning message stating that 
  3366.         wn_frmget is duplicated.  This is a case in which the error 
  3367.         message can be safely ignored.
  3368.  
  3369.                        #system auto exe
  3370.                        #model  small
  3371.                        #compile wn_frmget
  3372.                        #pragma link (swin.lib)
  3373.                        #compile %main
  3374.                        #link %prjname
  3375.  
  3376.         Once the project file has been modified, you can use the command 
  3377.         line compiler or the integrated environment to test your changes.
  3378.  
  3379.  
  3380.  
  3381.  
  3382.  
  3383.  
  3384.  
  3385.  
  3386.  
  3387.  
  3388.  
  3389.  
  3390.  
  3391.  
  3392.  
  3393.  
  3394.  
  3395.  
  3396.  
  3397.  
  3398.  
  3399.  
  3400.  
  3401.  
  3402.  
  3403.  
  3404.  
  3405.  
  3406.  
  3407.  
  3408.  
  3409.  
  3410.                                                            Page: 55
  3411.                                                      The Window BOSS
  3412.  
  3413.  
  3414.  
  3415.         Making Changes - continued.
  3416.  
  3417.  
  3418.  
  3419.         TopSpeed C Continued.
  3420.  
  3421.         If you have the Source media kit and would prefer to create new 
  3422.         libraries the following general procedure can be used.
  3423.              
  3424.           1) Make sure that ALL of The Window BOSS "C" and "ASSEMBLER" 
  3425.              source files have been extracted from their respective 
  3426.              archives.
  3427.  
  3428.              Make sure the following files are in the same directory as 
  3429.              The Window BOSS source files:
  3430.  
  3431.                   MAKESWIN.PR                   MAKEMWIN.PR 
  3432.                   MAKECWIN.PR                   MAKELWIN.PR
  3433.                   MAKEXWIN.PR                   MAKEMTWI.PR 
  3434.  
  3435.                   ?MSVLIB.OBJ                   MTMSVLIB.OBJ
  3436.  
  3437.           2) If applicable, edit "MSVLIB.ASM" as needed.  Be sure to set 
  3438.              LPROG and LDATA correctly.  ASSEMBLE by using the command:
  3439.  
  3440.                        C>MASM /MX MSVLIB;
  3441.  
  3442.              Model   SMALL   MEDIUM   COMPACT   LARGE   XLARGE   MTHREAD
  3443.  
  3444.              LPROG   FALSE   TRUE     FALSE     TRUE    TRUE     TRUE
  3445.              LDATA   FALSE   FALSE    TRUE      TRUE    TRUE     TRUE
  3446.  
  3447.              Name   SMSVLIB  MMSVLIB  CMSVLIB   LMSVLIB XMSVLIB  MTVLIB
  3448.  
  3449.          3) If Applicable, edit the "C" level modules.  
  3450.  
  3451.          4) Use the command line compiler create the new library....
  3452.  
  3453.              Memory Model   Command line        Produces
  3454.              ------------   ------------        --------
  3455.  
  3456.              SMALL          TSC MAKESWIN /M     SWIN.LIB
  3457.              MEDIUM         TSC MAKEMWIN /M     MWIN.LIB
  3458.              COMPACT        TSC MAKECWIN /M     CWIN.LIB
  3459.              LARGE          TSC MAKELWIN /M     LWIN.LIB
  3460.              XLARGE         TSC MAKEXWIN /M     XWIN.LIB
  3461.              MTHREAD        TSC MAKEMTWI /M     MTWI.LIB
  3462.  
  3463.  
  3464.  
  3465.  
  3466.  
  3467.  
  3468.  
  3469.  
  3470.  
  3471.                                                            Page: 56
  3472.                                                      The Window BOSS
  3473.  
  3474.  
  3475.  
  3476.         Making Changes - continued.
  3477.  
  3478.  
  3479.         9.4. Microsoft, Borland, Watcom  
  3480.         9.5. Zortech, Lattice, Mix Power C
  3481.  
  3482.              1) If applicable, edit the assembler level modules as 
  3483.                 needed.  Be sure to set LPROG and LDATA (if they apply).  
  3484.                 ASSEMBLE.
  3485.  
  3486.              2) If applicable, edit the "C" level modules.  COMPILE.
  3487.  
  3488.              3) Test your changes by linking the new/modified code 
  3489.                 with the existing libraries. For example to link your 
  3490.                 modified wn_move.c and v_getch:  (Microsoft example)
  3491.  
  3492.                   C> link myapp+wn_move+msvlib,,,swin
  3493.                 
  3494.                 If required, refer to your compiler documentation for 
  3495.                 explicit instructions on linking.
  3496.                                
  3497.              4) Update the existing Window BOSS libraries with the new 
  3498.                 "obj" files.  This is done with the librarian provided 
  3499.                 with your compiler.  Alternatively, you can use the batch 
  3500.                 files provided with the source code to recompile the 
  3501.                 entire library and rebuild, rather than update The 
  3502.                 Window BOSS libraries.
  3503.  
  3504.                 If required, refer to your compiler documentation for 
  3505.                 explicit instructions on how to use their librarians to 
  3506.                 update libraries.
  3507.  
  3508.         Remember, the memory model of the assembly "obj" file must 
  3509.         correspond to the memory model of the C "obj" files and the 
  3510.         memory model of any existing libraries. 
  3511.  
  3512.         9.5.1. Assembly Language Object Files
  3513.  
  3514.         The Source Media Kit now includes the object files of the 
  3515.         assembly language functions used by The Window BOSS. This will 
  3516.         free you from having to acquire, or use, an assembler unless you 
  3517.         intend to make changes to those functions written in assembly 
  3518.         language!  Now, all you have to do is copy and or rename the 
  3519.         appropriate object file before running the "MAKELIB" batch file!  
  3520.         A object file matrix is provided to assist you in determining 
  3521.         which object file should be used with which compiler and memory 
  3522.         model.
  3523.  
  3524.  
  3525.  
  3526.  
  3527.  
  3528.  
  3529.  
  3530.  
  3531.  
  3532.                                                            Page: 57
  3533.                                                      The Window BOSS
  3534.  
  3535.  
  3536.  
  3537.         Making Changes - continued.
  3538.  
  3539.  
  3540.         9.5.2. Assembly Language Object File Matrix
  3541.  
  3542.         The matrix that follows identifies the relationship between the 
  3543.         object filename, compiler memory model, and the filename used as 
  3544.         part of the "MAKELIB" batch utility provided as part of The 
  3545.         Window BOSS.  Use this matrix to determine what file to rename 
  3546.         (or copy) when recreating Window BOSS libraries that DO NOT 
  3547.         include any changes or additions to existing assembly language 
  3548.         functions.
  3549.                        
  3550.                                Object File Matrix
  3551.  
  3552.         Compiler     SMALL     MEDIUM   COMPACT  LARGE      MAKELIB NAME
  3553.  
  3554.         MSC Q/C Win  SMSVLIB   MMSVLIB  CMSVLIB  LMSVLIB    MSVLIB.OBJ
  3555.         MSC 6.X      SMSVLIB   MMSVLIB  CMSVLIB  LMSVLIB    MSVLIB.OBJ
  3556.         Turbo C      SMSVLIB   MMSVLIB  CMSVLIB  LMSVLIB    MSVLIB.OBJ
  3557.         Turbo C++    STCVLIB   MTCVLIB  CTCVLIB  LTCVLIB    TCVLIB.OBJ
  3558.         Borland C++  STCVLIB   MTCVLIB  CTCVLIB  LTCVLIB    TCVLIB.OBJ
  3559.         Watcom       SWCVLIB   MWCVLIB  CWCVLIB  LWCVLIB    WCVLIB.OBJ
  3560.         Lattice 6    SVLIB     PVLIB    DVLIB    LVLIB      VLIB.OBJ
  3561.         Zortech      SMSVLIB   MMSVLIB  CMSVLIB  LMSVLIB    MSVLIB.OBJ
  3562.         MIX          SPCVLIB   MPCVLIB  -------  LPCVLIB    PCVLIB.MIX
  3563.  
  3564.         Example: Rebuild the Large model library for Microsoft C 6.X, or 
  3565.         Quick C.  
  3566.  
  3567.         You would:
  3568.  
  3569.              (1) Use LCOMPILE to compile all C functions
  3570.  
  3571.                        C>LCOMPILE
  3572.  
  3573.              (2) Copy LMSVLIB.OBJ to MSVLIB.OBJ
  3574.  
  3575.                        C>COPY LMSVLIB.OBJ MSVLIB.OBJ
  3576.              
  3577.              (3) Rebuild the LARGE model library 
  3578.  
  3579.                        C>MAKELIB LWIN
  3580.  
  3581.  
  3582.  
  3583.  
  3584.  
  3585.  
  3586.  
  3587.  
  3588.  
  3589.  
  3590.  
  3591.  
  3592.  
  3593.                                                            Page: 58
  3594.                                                      The Window BOSS
  3595.  
  3596.  
  3597.  
  3598.         Making Changes - continued.
  3599.  
  3600.  
  3601.         Borland C++ and Turbo C++
  3602.  
  3603.         The HUGE memory model generally requires the same object file as 
  3604.         the LARGE. Turbo C++ is the exception (use HTCVLIB.OBJ).  The 
  3605.         following table outlines the values that LPROG, LDATA, and HUGE 
  3606.         need to have assigned for the various memory models.  This 
  3607.         information is provided for those who need to modify the assembly 
  3608.         language files to incorporate their local changes.
  3609.               
  3610.              Memory Model                    LPROG   LDATA   HUGE  *
  3611.              SMALL   (64k Code, 64k Data)    FALSE   FALSE   FALSE
  3612.              MEDIUM  (1MB Code, 64k Data)    TRUE    FALSE   FALSE
  3613.              COMPACT (64k Code, 1MB Data)    FALSE   TRUE    FALSE
  3614.              LARGE   (1MB Code, 1MB Data)    TRUE    TRUE    FALSE
  3615.              HUGE    (1MB Code, 1MB Data) *  TRUE    TRUE    TRUE
  3616.  
  3617.              * HUGE is only defined in TCVLIB.ASM.  The HUGE memory 
  3618.                model allows arrays to exceed 64k.
  3619.  
  3620.  
  3621.  
  3622.  
  3623.  
  3624.  
  3625.  
  3626.  
  3627.  
  3628.  
  3629.  
  3630.  
  3631.  
  3632.  
  3633.  
  3634.  
  3635.  
  3636.  
  3637.  
  3638.  
  3639.  
  3640.  
  3641.  
  3642.  
  3643.  
  3644.  
  3645.  
  3646.  
  3647.  
  3648.  
  3649.  
  3650.  
  3651.  
  3652.  
  3653.  
  3654.                                                            Page: 59
  3655.                                                      The Window BOSS
  3656.  
  3657.  
  3658.  
  3659.         Making Changes - continued.
  3660.  
  3661.  
  3662.         9.5.3. Assembler Code
  3663.  
  3664.           Selecting the Memory Model:
  3665.  
  3666.              Lattice
  3667.  
  3668.                 1) vlib.asm     Edit - Set LATTICE to 1 for Lattice.
  3669.                                 DOS.MAC determines the memory model.
  3670.  
  3671.              Microsoft C, QuickC, Borland C & Turbo C, Watcom C, Zortech
  3672.  
  3673.                 1) msvlib.asm   Set LDATA & LPROG to TRUE or FALSE 
  3674.                    tcvlib.asm   according to the following
  3675.                    wcvlib.asm   LDATA is TRUE for LARGE DATA
  3676.                                 LPROG is TRUE for LARGE CODE
  3677.                                 Assemble using:
  3678.                                   MASM /MX MSVLIB;   <- All but WATCOM
  3679.                                   MASM /MX WCVLIB;   <- WATCOM ONLY
  3680.  
  3681.              MIX Power C
  3682.  
  3683.                 1) pcvlib.asm   Set LDATA to FALSE, LPROG to TRUE
  3684.                                 Assemble using:
  3685.                                       MASM /ML PCVLIB;
  3686.  
  3687.                                 Run the MIX utility on PCVLIB.OBJ
  3688.  
  3689.  
  3690.  
  3691.  
  3692.  
  3693.  
  3694.  
  3695.  
  3696.  
  3697.  
  3698.  
  3699.  
  3700.  
  3701.  
  3702.  
  3703.  
  3704.  
  3705.  
  3706.  
  3707.  
  3708.  
  3709.  
  3710.  
  3711.  
  3712.  
  3713.  
  3714.  
  3715.                                                            Page: 60
  3716.                                                      The Window BOSS
  3717.  
  3718.  
  3719.  
  3720.         Making Changes - continued.
  3721.  
  3722.  
  3723.  
  3724.         9.6. C Code
  3725.  
  3726.         Pattern your enhancements after existing code.  The most common 
  3727.         mistakes are: (1) failing to call wn_activate, (2) failing to 
  3728.         check for error returns, and (3) failing to rebuild the libraries 
  3729.         correctly.
  3730.  
  3731.         Incorporating custom data entry functions is a straight forward 
  3732.         task if you follow the guidelines below.
  3733.  
  3734.              . Pattern your data entry routine after wn_gfloat.
  3735.  
  3736.              . Study the relationship between wn_gfloat and wn_frmget. 
  3737.  
  3738.              . Study the way in which arguments are loaded using the 
  3739.                unions v1 through v8.
  3740.  
  3741.              . Edit winboss.h and expand the table of data entry function 
  3742.                codes to include a new code above 100, for example:
  3743.  
  3744.                        #define GCUSTOM  101
  3745.  
  3746.                The table of data entry function codes is located towards 
  3747.                the tail end of "winboss.h" and begins with:
  3748.  
  3749.                        #define GDONE    0
  3750.  
  3751.              . Edit wn_frmget.c and expand the large case statement to 
  3752.                include a case for your custom data entry function.  
  3753.                Pattern the code you are adding after the existing code.
  3754.  
  3755.              . Rebuild the libraries adding your custom function and 
  3756.                replacing wn_frmget with the new version.
  3757.  
  3758.         Refer to wn_gfloat and wn_frmget....
  3759.  
  3760.              The general logic is to call the data entry function with 
  3761.              the argument list corresponding to this occurrence of this 
  3762.              type of field. The data entry function tests the value of 
  3763.              "fun". If it is "XEQ" then control immediately passes to the 
  3764.              logic that handles data entry.  If fun is "SET" then the 
  3765.              data entry function loads the form control block (indexed by 
  3766.              "fld") with the arguments being passed. This sets the stage 
  3767.              for subsequent calls (in a predetermined order) from 
  3768.              wn_frmget! When called, wn_frmget first displays all the 
  3769.              prompt fields, and then calls the data entry functions in 
  3770.              the order determined by the form control block.
  3771.  
  3772.  
  3773.  
  3774.  
  3775.  
  3776.                                                            Page: 61
  3777.                                                      The Window BOSS
  3778.  
  3779.  
  3780.  
  3781.         10. Function Call Synopsis
  3782.  
  3783.  
  3784.  
  3785.  
  3786.  
  3787.  
  3788.  
  3789.  
  3790.  
  3791.  
  3792.  
  3793.  
  3794.  
  3795.  
  3796.  
  3797.  
  3798.  
  3799.  
  3800.  
  3801.  
  3802.  
  3803.  
  3804.  
  3805.                  The Window BOSS and Data Clerk Function Library
  3806.  
  3807.  
  3808.  
  3809.  
  3810.  
  3811.  
  3812.  
  3813.  
  3814.  
  3815.  
  3816.  
  3817.  
  3818.  
  3819.  
  3820.  
  3821.  
  3822.  
  3823.  
  3824.  
  3825.  
  3826.  
  3827.  
  3828.  
  3829.  
  3830.  
  3831.  
  3832.  
  3833.  
  3834.  
  3835.  
  3836.  
  3837.                                                            Page: 62
  3838.                                                      The Window BOSS
  3839.  
  3840.  
  3841.  
  3842.         10.1. wn_init -- init window system
  3843.         10.2. wn_exit -- exit window system
  3844.         10.3. wn_psinit() -- init window system - physical size
  3845.  
  3846.         USAGE
  3847.  
  3848.           wn_init()
  3849.  
  3850.           wn_psinit(rows, columns)
  3851.           int rows, columns
  3852.  
  3853.              rows = # of rows on physical screen
  3854.              cols = # of columns on physical screen
  3855.  
  3856.           wn_exit()
  3857.  
  3858.           wn_init() or wn_psinit() and wn_exit(), if used, should be the 
  3859.           first and last functions called. Both wn_init() and wn_psinit() 
  3860.           save the video state and application entry screen.  wn_init() 
  3861.           or wn_psinit() is typically the very first function called in 
  3862.           the main program. wn_exit() restores the saved video state and 
  3863.           screen image.  wn_exit() is typically called just prior to 
  3864.           calling exit().
  3865.  
  3866.           wn_init() is the general case of wn_psinit().  It assumes a 
  3867.           physical screen size of 25x80 and therefore is the most 
  3868.           portable across video adapters.
  3869.  
  3870.           wn_psinit() allows those who need to use either the EGA 43x80
  3871.           or VGA 50x80 line modes a handy way to save the existing 43 or 
  3872.           50 line screen image.  Examples:
  3873.  
  3874.              wn_psinit(43,80);             /* saves 43 line EGA screen */
  3875.              wn_psinit(50,80);             /* saves 50 line VGA screen */
  3876.           
  3877.         RETURNS
  3878.  
  3879.           TRUE if successful, FALSE if error.
  3880.  
  3881.         CAUTIONS and ADDITIONAL NOTES
  3882.  
  3883.           wn_psinit() does not check to see if the parameters passed are 
  3884.           valid for the adapter in use.
  3885.  
  3886.           wn_psinit() does not change video modes based on the parameters 
  3887.           passed.  It is the programmers responsibility to insure that 
  3888.           the video adapter is in the correct mode for the application.
  3889.  
  3890.           Calling wn_psinit() with parameters greater than can be handled 
  3891.           by the machines video adapter can have interesting but 
  3892.           undesirable results.
  3893.  
  3894.           Use of wn_psinit() should be restricted to machines equipped 
  3895.           with EGA or VGA adapters only.
  3896.  
  3897.  
  3898.                                                            Page: 63
  3899.                                                      The Window BOSS
  3900.  
  3901.  
  3902.  
  3903.         10.4. wn_dmode -- set window display mode
  3904.  
  3905.         USAGE
  3906.  
  3907.           wn_dmode(mode)
  3908.           int mode
  3909.  
  3910.                   mode = PAINT for painted windows
  3911.                   mode = FLASH for instant windows
  3912.  
  3913.           wn_dmode sets the windows display mode as per mode, PAINT style 
  3914.           windows appear to be painted (top to bottom) where FLASH style 
  3915.           windows instantly appear.
  3916.  
  3917.         RETURNS
  3918.  
  3919.           Nothing.
  3920.  
  3921.         CAUTIONS and ADDITIONAL NOTES
  3922.  
  3923.           CGA, EGA, and VGA only. Updates are made directly to video 
  3924.           memory.
  3925.  
  3926.  
  3927.  
  3928.  
  3929.  
  3930.  
  3931.  
  3932.  
  3933.  
  3934.  
  3935.  
  3936.  
  3937.  
  3938.  
  3939.  
  3940.  
  3941.  
  3942.  
  3943.  
  3944.  
  3945.  
  3946.  
  3947.  
  3948.  
  3949.  
  3950.  
  3951.  
  3952.  
  3953.  
  3954.  
  3955.  
  3956.  
  3957.  
  3958.  
  3959.                                                            Page: 64
  3960.                                                      The Window BOSS
  3961.  
  3962.  
  3963.  
  3964.         10.5. wn_open -- open window 
  3965.  
  3966.         USAGE
  3967.  
  3968.           wn = (WINDOWPTR)wn_open(page, row, col, width, height, atrib,
  3969.                 batrib)
  3970.           int page, row, col, width, height, atrib, batrib;
  3971.  
  3972.                 page -  0 500, 510, 800, or 1000
  3973.                         1000 opens a borderless page
  3974.                          800 opens an exploding window
  3975.                          510 opens a window with transparent shadows
  3976.                          500 opens a window with black shadows
  3977.                            0 opens a bordered window (NORMAL)
  3978.                 row  -  row of upper left hand corner of the window
  3979.                 col  -  column of upper left hand corner of the window
  3980.                 width - INSIDE dimension (max value is 78 for a 80 column 
  3981.                         wide display, 80 if borderless)
  3982.                 height- INSIDE dimension (max value is 23 for a 25 row 
  3983.                         high display, 25 if borderless)
  3984.                 atrib - attribute to be used IN the window
  3985.                 batrib- attribute to be used for the border
  3986.  
  3987.           wn_open is usually the first function called to create and use 
  3988.           a window.  wn_open dynamically allocates memory to save the 
  3989.           area defined (by row, col, width, and height), saves the image, 
  3990.           opens the window and homes the logical cursor to row 0, col 0 
  3991.           of the window.  The window is now ready to be used by the 
  3992.           various window management routines.  
  3993.  
  3994.           Attributes (COLORS) are defined in winboss.h.
  3995.  
  3996.         RETURNS
  3997.  
  3998.           wn = window handle or NULL if error (no memory and/or bad 
  3999.           parameters can cause NULL returns)
  4000.  
  4001.         CAUTIONS and ADDITIONAL NOTES
  4002.  
  4003.           Width and height are inside dimensions. If you want a NORMAL 
  4004.           window with a work area of 10 rows and 5 columns, the width is 
  4005.           7 and the height is 12.  Maximum values are linked to the 
  4006.           actual physical screen size and are dependent upon whether or 
  4007.           not a borderless window is being opened.  The window, its 
  4008.           borders (if they exist), and its shadow (if it exists) must all 
  4009.           fit and be visible on the physical screen.
  4010.           
  4011.  
  4012.  
  4013.  
  4014.  
  4015.  
  4016.  
  4017.  
  4018.  
  4019.  
  4020.                                                            Page: 65
  4021.                                                      The Window BOSS
  4022.  
  4023.  
  4024.  
  4025.         wn_open - continued.
  4026.  
  4027.  
  4028.  
  4029.           The flashing cursor will not be displayed unless wn_sync() has 
  4030.           been called with a value of TRUE.  
  4031.  
  4032.           The window "wn" automatically becomes the top window tile upon 
  4033.           return.
  4034.  
  4035.           Exploding windows are linked to the time of day clock.  This is 
  4036.           done by reading the time of day (in ticks) directly from low 
  4037.           memory.  If you would like to vary the explosion time it can be 
  4038.           done by calling the internal routine "wns_stdiv" with a long 
  4039.           integer constant in the range of 1 to 10.  The default value is 
  4040.           5L.  Increasing the value will cause the explosion to be 
  4041.           faster.  For example:
  4042.  
  4043.                                  wns_stdiv(10L);
  4044.  
  4045.           Window types can not be combined.  That is to say that you can 
  4046.           not have shadowed borderless windows, borderless exploding 
  4047.           windows, or exploding windows with shadows.
  4048.  
  4049.           Windows with transparent shadows should not be moved, hidden, 
  4050.           then accessed. This limitation is due to the fact that the 
  4051.           transparent shadow area is treated as if it were the contents 
  4052.           of a window and is therefore preserved as the window it is 
  4053.           attached to is manipulated.  In some cases, this causes the 
  4054.           transparent shadow area to appear invalid.  This restriction 
  4055.           does not apply to windows with black shadows.
  4056.  
  4057.         See Also - wn_psinit and wn_init
  4058.  
  4059.  
  4060.  
  4061.  
  4062.  
  4063.  
  4064.  
  4065.  
  4066.  
  4067.  
  4068.  
  4069.  
  4070.  
  4071.  
  4072.  
  4073.  
  4074.  
  4075.  
  4076.  
  4077.  
  4078.  
  4079.  
  4080.  
  4081.                                                            Page: 66
  4082.                                                      The Window BOSS
  4083.  
  4084.  
  4085.  
  4086.         10.6. wn_title -- title window
  4087.  
  4088.         USAGE
  4089.  
  4090.           wn_title(wn,title)
  4091.           WINDOWPTR wn;
  4092.           char *title;
  4093.  
  4094.                 wn    - window handle
  4095.                 title - string pointer to title
  4096.  
  4097.           The title is displayed on the top border of the window using 
  4098.           the currently defined border attribute.  The cursor is 
  4099.           positioned off the screen after the title is written.  
  4100.  
  4101.         RETURNS
  4102.  
  4103.           TRUE if all is well, NULL if the title is to large to fit on 
  4104.           the top border or error.
  4105.  
  4106.         CAUTIONS and ADDITIONAL NOTES
  4107.  
  4108.           The window "wn" automatically becomes the top window tile upon 
  4109.           return.
  4110.  
  4111.  
  4112.  
  4113.         10.7. wn_titla -- title window with attribute
  4114.  
  4115.         USAGE
  4116.  
  4117.           wn_titla(wn,title,atrib)
  4118.           WINDOWPTR wn;
  4119.           char *title;
  4120.           int atrib;
  4121.  
  4122.                 wn    - window handle
  4123.                 title - string pointer to title
  4124.                 atrib - attribute to use for text
  4125.  
  4126.           The title is displayed on the top border of the window using 
  4127.           the attribute specified by atrib.  The cursor is positioned off 
  4128.           the screen after the title is written.  
  4129.  
  4130.         RETURNS
  4131.  
  4132.           TRUE if all is well, NULL if the title is to large to fit on 
  4133.           the top border or error.
  4134.  
  4135.         CAUTIONS and ADDITIONAL NOTES
  4136.  
  4137.           The window "wn" automatically becomes the top window tile upon 
  4138.           return.
  4139.  
  4140.  
  4141.  
  4142.                                                            Page: 67
  4143.                                                      The Window BOSS
  4144.  
  4145.  
  4146.  
  4147.         10.8. wn_stitle -- super title window
  4148.  
  4149.         USAGE
  4150.  
  4151.           wn_title(wn,title,location)
  4152.           WINDOWPTR wn;
  4153.           char *title;
  4154.           int location;
  4155.  
  4156.                 wn    -    window handle
  4157.                 title -    string pointer to title
  4158.                 location - border location
  4159.  
  4160.             Location can be any of the following (defined in winboss.h):
  4161.  
  4162.                 WNTOPR  - top right 
  4163.                 WNTOPL  - top left 
  4164.                 WNTOPC  - top center 
  4165.                 WNBOTR  - bottom right 
  4166.                 WNBOTL  - bottom left 
  4167.                 WNBOTC  - bottom center 
  4168.  
  4169.           The title is displayed on the border at the location specified 
  4170.           using the currently defined border attribute.  The cursor is 
  4171.           positioned off the screen after the title is written.  
  4172.  
  4173.         RETURNS
  4174.  
  4175.           TRUE if all is well, NULL if the title is to large to fit on 
  4176.           the border.
  4177.  
  4178.         CAUTIONS and ADDITIONAL NOTES
  4179.  
  4180.           The window "wn" automatically becomes the top window tile upon 
  4181.           return.
  4182.  
  4183.  
  4184.  
  4185.  
  4186.  
  4187.  
  4188.  
  4189.  
  4190.  
  4191.  
  4192.  
  4193.  
  4194.  
  4195.  
  4196.  
  4197.  
  4198.  
  4199.  
  4200.  
  4201.  
  4202.  
  4203.                                                            Page: 68
  4204.                                                      The Window BOSS
  4205.  
  4206.  
  4207.  
  4208.         10.9. wn_stitla -- super title window with attribute
  4209.  
  4210.         USAGE
  4211.  
  4212.           wn_stitla(wn,title,atrib,location)
  4213.           WINDOWPTR wn;
  4214.           char *title;
  4215.           int atrib;
  4216.           int location;
  4217.  
  4218.                 wn    - window handle
  4219.                 title - string pointer to title
  4220.                 atrib - attribute to use for text
  4221.                 location - border location
  4222.  
  4223.             Location can be any of the following (defined in winboss.h):
  4224.  
  4225.                 WNTOPR  - top right 
  4226.                 WNTOPL  - top left 
  4227.                 WNTOPC  - top center 
  4228.                 WNBOTR  - bottom right 
  4229.                 WNBOTL  - bottom left 
  4230.                 WNBOTC  - bottom center 
  4231.  
  4232.  
  4233.           The title is displayed on the border at the location specified 
  4234.           using the using the attribute specified by atrib.  The cursor 
  4235.           is positioned off the screen after the title is written.  
  4236.  
  4237.         RETURNS
  4238.  
  4239.           TRUE if all is well, NULL if the title is to large to fit on 
  4240.           the border.
  4241.  
  4242.         CAUTIONS and ADDITIONAL NOTES
  4243.  
  4244.           The window "wn" automatically becomes the top window tile upon 
  4245.           return.
  4246.  
  4247.  
  4248.  
  4249.  
  4250.  
  4251.  
  4252.  
  4253.  
  4254.  
  4255.  
  4256.  
  4257.  
  4258.  
  4259.  
  4260.  
  4261.  
  4262.  
  4263.  
  4264.                                                            Page: 69
  4265.                                                      The Window BOSS
  4266.  
  4267.  
  4268.  
  4269.         10.10. wn_close -- close window
  4270.  
  4271.         USAGE
  4272.  
  4273.           wn_close(wn) 
  4274.           WINDOWPTR wn; 
  4275.  
  4276.                 wn - handle of a previously opened window.
  4277.  
  4278.           wn_close removes the window specified by wn and restores the 
  4279.           screen area under the window to its previous contents.  The 
  4280.           memory allocated by wn_open is returned to the free list.  The 
  4281.           cursor is positioned to where it was located prior to the 
  4282.           wn_open call.  
  4283.  
  4284.         RETURNS 
  4285.  
  4286.           TRUE or NULL if error
  4287.  
  4288.         CAUTIONS and ADDITIONAL NOTES 
  4289.  
  4290.           None.
  4291.  
  4292.  
  4293.  
  4294.         10.11. wn_save -- save screen image 
  4295.  
  4296.         USAGE
  4297.  
  4298.           wn = (WINDOWPTR)wn_save(page, row, col, width, height)
  4299.           int page, row, col, width, height;
  4300.  
  4301.                 page -  always 0.
  4302.                 row  -  row of upper left hand corner of the window
  4303.                 col  -  column of upper left hand corner of the window
  4304.                 width - INSIDE dimension (max value is 78)
  4305.                 height- INSIDE dimension (max value is 23)
  4306.  
  4307.           wn_save can be used to save areas of the screen for purposes 
  4308.           other than windows.  
  4309.  
  4310.           Memory for the screen image is dynamically allocated.
  4311.  
  4312.         RETURNS
  4313.  
  4314.           wn = window handle or NULL if error
  4315.  
  4316.         CAUTIONS and ADDITIONAL NOTES
  4317.  
  4318.           The window handle returned by wn_save should only be used with 
  4319.           wn_restore. Use with other routines could produce unpredictable 
  4320.           results.
  4321.  
  4322.  
  4323.  
  4324.  
  4325.                                                            Page: 70
  4326.                                                      The Window BOSS
  4327.  
  4328.  
  4329.  
  4330.         10.12. wn_restore -- restore saved screen image
  4331.  
  4332.         USAGE
  4333.  
  4334.           wn_restore(wn)
  4335.           WINDOWPTR wn;
  4336.  
  4337.                 wn - handle of previously wn_save(ed) window.
  4338.  
  4339.           Restores the screen image corresponding to the window handle 
  4340.           wn, and allocated memory is returned to the free list.
  4341.  
  4342.         RETURNS
  4343.  
  4344.           TRUE or NULL if error
  4345.  
  4346.         CAUTIONS and ADDITIONAL NOTES
  4347.  
  4348.           This function should only be used with window handles obtained 
  4349.           from wn_save.
  4350.  
  4351.  
  4352.  
  4353.         10.13. wn_move -- move window
  4354.  
  4355.         USAGE
  4356.  
  4357.           wn = (WINDOWPTR)wn_move(wn,row,col)
  4358.  
  4359.                 wn -  handle of window to be moved
  4360.                 row - destination row
  4361.                 col - destination column
  4362.  
  4363.           Moves the window corresponding to wn to a new location.  The 
  4364.           cursor is positioned off the screen after the call.  
  4365.  
  4366.         RETURNS
  4367.  
  4368.           Window handle of the window moved or NULL if error.
  4369.  
  4370.         CAUTIONS and ADDITIONAL NOTES
  4371.  
  4372.           The window "wn" automatically becomes the top window tile upon 
  4373.           return.
  4374.  
  4375.  
  4376.  
  4377.  
  4378.  
  4379.  
  4380.  
  4381.  
  4382.  
  4383.  
  4384.  
  4385.  
  4386.                                                            Page: 71
  4387.                                                      The Window BOSS
  4388.  
  4389.  
  4390.  
  4391.         10.14. wn_locate -- locate cursor in window
  4392.  
  4393.         USAGE
  4394.  
  4395.           wn_locate(wn, row, col)
  4396.           WINDOWPTR wn;
  4397.           int row, col;
  4398.  
  4399.                 wn  - window handle
  4400.                 row - row to position to (relative to window origin)
  4401.                 col - column to position to (relative to window origin)
  4402.  
  4403.           Position the cursor to the row and column specified.  Row and  
  4404.           Column values are relative to the origin of the window (0,0 
  4405.           locates the cursor in the upper left hand corner of the window 
  4406.           referenced by wn).
  4407.  
  4408.         RETURNS
  4409.  
  4410.           TRUE or NULL if error
  4411.  
  4412.         CAUTIONS and ADDITIONAL NOTES
  4413.  
  4414.           Values of row & col are not checked.
  4415.  
  4416.           The window "wn" automatically becomes the top window tile upon 
  4417.           return.
  4418.  
  4419.  
  4420.  
  4421.  
  4422.  
  4423.  
  4424.  
  4425.  
  4426.  
  4427.  
  4428.  
  4429.  
  4430.  
  4431.  
  4432.  
  4433.  
  4434.  
  4435.  
  4436.  
  4437.  
  4438.  
  4439.  
  4440.  
  4441.  
  4442.  
  4443.  
  4444.  
  4445.  
  4446.  
  4447.                                                            Page: 72
  4448.                                                      The Window BOSS
  4449.  
  4450.  
  4451.  
  4452.         10.15. wn_printf -- window printf
  4453.  
  4454.         USAGE
  4455.  
  4456.           wn_printf(wn, cs, args)
  4457.           WINDOWPTR wn;
  4458.           char *cs;
  4459.           ?? arg1 ... argn;
  4460.  
  4461.                 wn   - window handle
  4462.                 cs   - format control string
  4463.                 args - argument list
  4464.  
  4465.           printf function for windows!
  4466.  
  4467.         RETURNS
  4468.  
  4469.           TRUE or NULL if error
  4470.  
  4471.         CAUTIONS and ADDITIONAL NOTES
  4472.  
  4473.           Output string length is limited to 254 bytes.
  4474.  
  4475.           Registered users can edit the wn_printf function and set the 
  4476.           limit to whatever they wish.
  4477.  
  4478.           Integer only for Microsoft 3.0 and Aztec.  This limitation 
  4479.           be overcome by using sprintf in conjunction with wn_printf.  
  4480.           For example:
  4481.  
  4482.                   char buf[256];
  4483.                        ..
  4484.                        ..
  4485.                   sprintf(buf,"%d %l %x\n", intval, longval, hexval);
  4486.                   wn_printf(wn, buf);
  4487.  
  4488.           Full support for all others.  
  4489.  
  4490.           The window "wn" automatically becomes the top window tile upon 
  4491.           return.
  4492.  
  4493.  
  4494.  
  4495.  
  4496.  
  4497.  
  4498.  
  4499.  
  4500.  
  4501.  
  4502.  
  4503.  
  4504.  
  4505.  
  4506.  
  4507.  
  4508.                                                            Page: 73
  4509.                                                      The Window BOSS
  4510.  
  4511.  
  4512.  
  4513.         10.16. wn_puts -- put string (high speed)
  4514.         10.17. wn_putc -- put character 
  4515.  
  4516.         USAGE
  4517.  
  4518.           wn_puts(wn, row, col, string)
  4519.           WINDOWPTR wn;
  4520.           int row, col;
  4521.           char *string;
  4522.  
  4523.           wn_putc(wn, row, col, c)
  4524.           WINDOWPTR wn;
  4525.           int row, col;
  4526.           char c;
  4527.              
  4528.                 wn -    window handle
  4529.                 row -   row to print the string at
  4530.                 col -   column to print the string at
  4531.                 string- the string to print
  4532.                 c -     the character to print
  4533.  
  4534.           Row and Col are relative to the origin of the window.
  4535.  
  4536.           The cursor is displayed only if wn_synflg has been called with 
  4537.           a value of TRUE.
  4538.  
  4539.         RETURNS
  4540.  
  4541.           TRUE or NULL if error
  4542.  
  4543.         CAUTIONS and ADDITIONAL NOTES
  4544.  
  4545.           wn_puts writes the string directly to the video ram. Tabs, line 
  4546.           feeds, carriage returns and other control characters are not 
  4547.           filtered or processed in any way.
  4548.  
  4549.           Range checks are not performed to insure the specified string 
  4550.           can be contained in the window.  
  4551.  
  4552.           The window "wn" automatically becomes the top window tile upon 
  4553.           return.
  4554.  
  4555.  
  4556.  
  4557.  
  4558.  
  4559.  
  4560.  
  4561.  
  4562.  
  4563.  
  4564.  
  4565.  
  4566.  
  4567.  
  4568.  
  4569.                                                            Page: 74
  4570.                                                      The Window BOSS
  4571.  
  4572.  
  4573.  
  4574.         10.18. wn_gets -- get string with validation
  4575.  
  4576.         USAGE
  4577.  
  4578.           (char *) wn_gets(wn, buf, va, uva)
  4579.           WINDOWPTR wn;
  4580.           char *buf;
  4581.           int va;
  4582.           char *uva;
  4583.  
  4584.                 wn -    window handle
  4585.                 buf -   user buffer for string
  4586.                 va -    input validation to be used
  4587.                 uva -   user validation list [optional]
  4588.  
  4589.           va specifies the type of input validation to be performed as 
  4590.           data is being entered. Options are:
  4591.  
  4592.                 (1) none                no restrictions - accept everything
  4593.                 (2) integer             accept: 0 thru 9 + -
  4594.                 (3) floating point      accept: 0 thru 9 + - .
  4595.                 (4) alpha only          accept: a thru z 
  4596.                                         (upper & lower case)
  4597.                 (5) upper case only     accept: A thru Z 
  4598.                 (6) validation list     accept: only those characters
  4599.                     (optional)                  specified via uva string.
  4600.  
  4601.                 ORing va with 0x8000 disables data entry character echo.
  4602.  
  4603.           The following editing functions are supported:
  4604.  
  4605.                 . backspace & rubout do the logical things
  4606.                 . ^U, ^X, and ^C wipe the field clean
  4607.                 . Return and Esc end the input function 
  4608.  
  4609.           Data entry takes place at the current logical cursor location. 
  4610.           You  can, of course, position the cursor to where you wish 
  4611.           prior to calling wn_gets.
  4612.  
  4613.           Example:
  4614.  
  4615.                 wn_printf(wn,"Enter your name > ");
  4616.                 wn_gets(wn,buf,4,0);
  4617.  
  4618.         RETURNS
  4619.  
  4620.           Pointer to buf or NULL if error
  4621.  
  4622.         CAUTIONS and ADDITIONAL NOTES
  4623.  
  4624.           The window "wn" automatically becomes the top window tile upon   
  4625.           return.  This function is provided for historical purposes, 
  4626.           more complete and flexible functions are included as part of 
  4627.           the Data Clerk.
  4628.  
  4629.  
  4630.                                                            Page: 75
  4631.                                                      The Window BOSS
  4632.  
  4633.  
  4634.  
  4635.         10.19. wn_putsa -- put string and attribute (high speed)
  4636.         10.20. wn_putca -- put character and attribute
  4637.  
  4638.         USAGE
  4639.  
  4640.           wn_putsa(wn, row, col, string, atrib)
  4641.           WINDOWPTR wn;
  4642.           int row, col;
  4643.           char *string;
  4644.           int atrib;
  4645.  
  4646.           wn_putca(wn, row, col, c, atrib)
  4647.           WINDOWPTR wn;
  4648.           int row, col;
  4649.           char c;
  4650.           int atrib;
  4651.  
  4652.                 wn -    window handle
  4653.                 row -   row to print the string at
  4654.                 col -   column to print the string at
  4655.                 string- the string to print
  4656.                 c -     the character to print
  4657.                 atrib - attribute to be used with string
  4658.  
  4659.           Row and Col are relative to the origin of the window.
  4660.  
  4661.           The cursor is displayed only if wn_synflg has been called with 
  4662.           a value of TRUE.
  4663.  
  4664.         RETURNS
  4665.  
  4666.           TRUE or NULL if error
  4667.  
  4668.         CAUTIONS and ADDITIONAL NOTES
  4669.  
  4670.           wn_puts writes the string directly to the video ram. Tabs, line 
  4671.           feeds, carriage returns and other control characters are not 
  4672.           filtered or processed in any way.
  4673.  
  4674.           Range checks are not performed to insure the specified string 
  4675.           can be contained in the window.  
  4676.  
  4677.           The window "wn" automatically becomes the top window tile upon 
  4678.           return.
  4679.  
  4680.  
  4681.  
  4682.  
  4683.  
  4684.  
  4685.  
  4686.  
  4687.  
  4688.  
  4689.  
  4690.  
  4691.                                                            Page: 76
  4692.                                                      The Window BOSS
  4693.  
  4694.  
  4695.  
  4696.         wn_getca -- get character and attribute from window
  4697.  
  4698.         USAGE
  4699.  
  4700.           unsigned int wn_getca(wn, row, col)
  4701.           WINDOWPTR wn;
  4702.           int row, col;
  4703.  
  4704.                 wn -    window handle
  4705.                 row -   row to fetch character/attribute from 
  4706.                 col -   column to fetch character/attribute from 
  4707.  
  4708.           Row and Col are relative to the origin of the window.
  4709.  
  4710.           The cursor is displayed only if wn_synflg has been called with 
  4711.           a value of TRUE.
  4712.  
  4713.         RETURNS
  4714.  
  4715.           The character attribute pair.  Attribute in the upper 8 bits, 
  4716.           character in the lower 8 bits.
  4717.  
  4718.         CAUTIONS and ADDITIONAL NOTES
  4719.  
  4720.           wn_getca calls _getca.
  4721.  
  4722.           The window "wn" automatically becomes the top window tile upon 
  4723.           return.
  4724.  
  4725.           Range checks are not performed.
  4726.  
  4727.  
  4728.  
  4729.  
  4730.  
  4731.  
  4732.  
  4733.  
  4734.  
  4735.  
  4736.  
  4737.  
  4738.  
  4739.  
  4740.  
  4741.  
  4742.  
  4743.  
  4744.  
  4745.  
  4746.  
  4747.  
  4748.  
  4749.  
  4750.  
  4751.  
  4752.                                                            Page: 77
  4753.                                                      The Window BOSS
  4754.  
  4755.  
  4756.  
  4757.         10.21. wn_insrow -- insert row in window
  4758.  
  4759.         USAGE
  4760.  
  4761.           wn_insrow(wn, row)
  4762.           WINDOWPTR wn;
  4763.           int row;
  4764.  
  4765.                 wn -  window handle
  4766.                 row - row at which a line is to be inserted
  4767.  
  4768.           Row is relative to the origin of the window.  All lines below 
  4769.           the row specified are scrolled down.  The currently defined 
  4770.           window attribute is used to clear the lines inserted.  
  4771.  
  4772.         RETURNS
  4773.  
  4774.           TRUE or NULL if error
  4775.  
  4776.         CAUTIONS and ADDITIONAL NOTES
  4777.  
  4778.           The window "wn" automatically becomes the top window tile upon 
  4779.           return.
  4780.  
  4781.  
  4782.  
  4783.         10.22. wn_delrow -- delete row from window
  4784.  
  4785.         USAGE
  4786.  
  4787.           wn_delrow(wn, row)
  4788.           WINDOWPTR wn;
  4789.           int row;
  4790.  
  4791.                 wn -  window handle
  4792.                 row - row at which a line is to be deleted
  4793.  
  4794.           Row is relative to the origin of the window.  All lines below 
  4795.           the row specified are scrolled up. The currently defined window 
  4796.           attribute is used to clear the lines inserted.  
  4797.  
  4798.         RETURNS
  4799.  
  4800.           TRUE or NULL if error
  4801.  
  4802.         CAUTIONS and ADDITIONAL NOTES
  4803.  
  4804.           The window "wn" automatically becomes the top window tile upon 
  4805.           return.
  4806.  
  4807.  
  4808.  
  4809.  
  4810.  
  4811.  
  4812.  
  4813.                                                            Page: 78
  4814.                                                      The Window BOSS
  4815.  
  4816.  
  4817.  
  4818.         10.23. wn_clr -- window: clear entire window
  4819.         10.24. wn_clrrow -- window: clear single row 
  4820.         10.25. wn_clreol -- window: clear cursor to end of line
  4821.         10.26. wn_clreow -- window: clear cursor to end of window
  4822.  
  4823.         USAGE
  4824.  
  4825.           wn_clr(wn)
  4826.           wn_clrrow(wn,row)
  4827.           wn_clreol(wn,row,col)
  4828.           wn_clreow(wn,row,col);
  4829.  
  4830.           WINDOWPTR wn;
  4831.           int row, col;
  4832.            
  4833.                 wn - window handle
  4834.                 row - row in window where clear function begins
  4835.                 col - column in window where clear function begins
  4836.           
  4837.         RETURNS
  4838.  
  4839.           TRUE or NULL if error
  4840.  
  4841.         CAUTIONS and ADDITIONAL NOTES
  4842.  
  4843.           The window "wn" automatically becomes the top window tile upon 
  4844.           return.
  4845.  
  4846.           The currently defined window attribute is used to clear the 
  4847.           interior portion of the window.  
  4848.  
  4849.           wn_clr homes the virtual cursor other functions position cursor 
  4850.           to the location specified by row and col.
  4851.  
  4852.         10.27. wn_activate -- activate window
  4853.  
  4854.         USAGE
  4855.  
  4856.           wn_activate(wn)
  4857.           WINDOWPTR wn;
  4858.  
  4859.              wn - window handle
  4860.  
  4861.           Activate a previously opened window.  The window specified by 
  4862.           "wn" becomes the top window tile.
  4863.  
  4864.         RETURNS
  4865.  
  4866.           TRUE or NULL if error
  4867.  
  4868.         CAUTIONS and ADDITIONAL NOTES
  4869.  
  4870.           None.
  4871.  
  4872.  
  4873.  
  4874.                                                            Page: 79
  4875.                                                      The Window BOSS
  4876.  
  4877.  
  4878.  
  4879.         10.28. wn_color -- set window & border attribute
  4880.  
  4881.         USAGE
  4882.  
  4883.           wn_color(wn, atrib, batrib)
  4884.           WINDOWPTR wn;
  4885.           unsigned int atrib, batrib;
  4886.  
  4887.                 wn -    window handle
  4888.                 atrib - attribute to be used for the window
  4889.                 batrib- attribute to be used for the border
  4890.  
  4891.           wn_color sets the attribute to be used for all subsequent 
  4892.           operations in the window.  The attribute byte contains the 
  4893.           background specific data in the upper 4 bits and the foreground 
  4894.           specific data in the lower 4 bits.  Color and bit definitions 
  4895.           can be found in winboss.h. You can use a statement of the form:
  4896.  
  4897.                          atrib = (bground << 4 | fground);
  4898.  
  4899.           to set the attribute to the correct format.  
  4900.  
  4901.           Attributes are defined in winboss.h.
  4902.  
  4903.         RETURNS
  4904.  
  4905.           Nothing.
  4906.  
  4907.         CAUTIONS and ADDITIONAL NOTES
  4908.  
  4909.           None.
  4910.  
  4911.  
  4912.  
  4913.  
  4914.  
  4915.  
  4916.  
  4917.  
  4918.  
  4919.  
  4920.  
  4921.  
  4922.  
  4923.  
  4924.  
  4925.  
  4926.  
  4927.  
  4928.  
  4929.  
  4930.  
  4931.  
  4932.  
  4933.  
  4934.  
  4935.                                                            Page: 80
  4936.                                                      The Window BOSS
  4937.  
  4938.  
  4939.  
  4940.         10.29. wn_wrap -- set/clear line wrap flag
  4941.  
  4942.         USAGE
  4943.  
  4944.           wn_wrap(wn, flag) 
  4945.           WINDOWPTR wn;     
  4946.           int flag;
  4947.  
  4948.                 wn -   window handle
  4949.                 flag - wrap flag (TRUE or FALSE)
  4950.  
  4951.           Sets the line wrap flag for window functions.  If line wrap is 
  4952.           true, output that exceeds the width of a window is 
  4953.           automatically placed on the next line.  When the line wrap flag 
  4954.           is false, output that exceeds the width of the window is lost.  
  4955.  
  4956.         RETURNS
  4957.  
  4958.           Nothing.
  4959.  
  4960.         CAUTIONS and ADDITIONAL NOTES
  4961.  
  4962.           None.
  4963.  
  4964.  
  4965.  
  4966.         10.30. wn_sync -- set/clear cursor synchronization flag
  4967.  
  4968.         USAGE
  4969.  
  4970.           wn_sync(wn, flag) 
  4971.           WINDOWPTR wn;     
  4972.           int flag;
  4973.  
  4974.                 wn -   window handle
  4975.                 flag - synchronization flag (TRUE or FALSE)
  4976.  
  4977.           When wn_sync is called with a value of TRUE all subsequent text 
  4978.           output to the window will have a flashing (normal) cursor 
  4979.           displayed following the last character output. Calling wn_sync 
  4980.           with a value of false inhibits the cursor from physically 
  4981.           advancing (it is always logically advanced).  
  4982.  
  4983.         RETURNS
  4984.  
  4985.           Nothing.
  4986.  
  4987.         CAUTIONS and ADDITIONAL NOTES
  4988.  
  4989.           None.
  4990.  
  4991.  
  4992.  
  4993.  
  4994.  
  4995.  
  4996.                                                            Page: 81
  4997.                                                      The Window BOSS
  4998.  
  4999.  
  5000.  
  5001.         10.31. wn_scroll -- set scrolling method for window
  5002.  
  5003.         USAGE
  5004.  
  5005.           wn_scroll(wn,method)
  5006.           WINDOWPTR wn;
  5007.           int method;
  5008.  
  5009.                   wn -      window handle.
  5010.                   method -  BIOS or DMAS
  5011.  
  5012.            Set the method to be used to scroll the contents of the window 
  5013.            to use either the ROM BIOS (BIOS), or the flicker free DMA 
  5014.            logic.  BIOS and DMAS are defined in "winboss.h".  
  5015.  
  5016.            The default scrolling mode is DMAS.
  5017.  
  5018.            The Window BOSS incorporates machine independent logic that 
  5019.            ensures that scrolling on color systems is performed in such a 
  5020.            way as to totally eliminate snow and flicker.  This logic, 
  5021.            although bulletproof, can slow scrolling down.  Setting the 
  5022.            scrolling method to BIOS provides a machine independent way to 
  5023.            improve the scrolling speed with a (perhaps) proportional 
  5024.            increase in flicker.  Keep in mind that recent developments in 
  5025.            CGA and EGA technology have, for the most part, eliminated 
  5026.            scrolling flicker at the hardware level.  If your system is 
  5027.            equipped with one of these boards, you may achieve a 
  5028.            noticeable improvement in scrolling speed by using wn_scroll() 
  5029.            to set the scrolling method to BIOS.  Additionally, there are 
  5030.            several console device drivers (FANSI and NANSI to mention 
  5031.            two) that "patch" the BIOS routines to achieve the same 
  5032.            result.  
  5033.  
  5034.            Setting the scrolling method to BIOS when wn_dmaflg=FALSE has 
  5035.            no effect.
  5036.  
  5037.         RETURNS
  5038.  
  5039.            Nothing.
  5040.  
  5041.         CAUTIONS and ADDITIONAL NOTES
  5042.  
  5043.            Color systems only.
  5044.  
  5045.  
  5046.  
  5047.  
  5048.  
  5049.  
  5050.  
  5051.  
  5052.  
  5053.  
  5054.  
  5055.  
  5056.  
  5057.                                                            Page: 82
  5058.                                                      The Window BOSS
  5059.  
  5060.  
  5061.  
  5062.         10.32. wn_dma -- set/clear write RAM directly flag
  5063.  
  5064.         USAGE
  5065.  
  5066.           wn_dma(flag)      
  5067.           int flag;         
  5068.  
  5069.                 flag - write to video RAM flag (TRUE or FALSE).
  5070.  
  5071.           The windowing routines assume that your video card supports 
  5072.           direct access to the video RAM (normal for monochrome 
  5073.           monitors).  
  5074.  
  5075.         RETURNS
  5076.  
  5077.           Nothing.
  5078.  
  5079.         CAUTIONS and ADDITIONAL NOTES
  5080.  
  5081.           None.
  5082.  
  5083.  
  5084.  
  5085.         10.33. wn_fixcsr -- update window cursor position
  5086.  
  5087.         USAGE
  5088.  
  5089.           wn_fixcsr(wn)     
  5090.           WINDOWPTR wn;     
  5091.  
  5092.                 wn - window handle
  5093.  
  5094.           wn_fixcsr is a companion routine to wn_sync.  Causes the 
  5095.           physical cursor to be placed at the logical cursor location.  
  5096.           It is typically called after wn_sync has been called to disable 
  5097.           cursor synchronization.  wn_fixcsr does not alter the state of 
  5098.           the windows cursor synchronization flag.  
  5099.  
  5100.         RETURNS
  5101.  
  5102.           TRUE or NULL if error
  5103.  
  5104.         CAUTIONS and ADDITIONAL NOTES
  5105.  
  5106.           The window "wn" automatically becomes the top window tile upon 
  5107.           return.
  5108.  
  5109.  
  5110.  
  5111.  
  5112.  
  5113.  
  5114.  
  5115.  
  5116.  
  5117.  
  5118.                                                            Page: 83
  5119.                                                      The Window BOSS
  5120.  
  5121.  
  5122.  
  5123.         10.34. wn_boxset -- set box drawing character set
  5124.  
  5125.         USAGE
  5126.  
  5127.           wn_boxset(ul, ur, tb, sd, ll, lr);
  5128.           int ul, ur, tb, sd, ll, lr;
  5129.  
  5130.             ul - upper left corner character
  5131.             ur - upper right corner character
  5132.             tb - top/bottom line character
  5133.             sd - left/right side character
  5134.             ll - lower left corner character
  5135.             lr - lower right corner character
  5136.  
  5137.           wn_boxset set the characters to be used to frame all future 
  5138.           windows.
  5139.  
  5140.         RETURNS
  5141.  
  5142.           Nothing.
  5143.  
  5144.         CAUTIONS and ADDITIONAL NOTES
  5145.  
  5146.           None.
  5147.  
  5148.  
  5149.  
  5150.         10.35. wn_natrib -- set new attribute in window NOW!
  5151.  
  5152.         USAGE
  5153.  
  5154.           wn_natrib(wn,atrib)
  5155.           WINDOWPTR wn;
  5156.           int atrib;
  5157.  
  5158.             wn    - window handle
  5159.             atrib - attribute to set the window specified by wn to.  
  5160.  
  5161.           The attributes of the window are changed immediately.
  5162.  
  5163.           Attributes are defined in window.h
  5164.  
  5165.           The border is not altered.
  5166.  
  5167.         RETURNS
  5168.  
  5169.           TRUE or NULL if error
  5170.  
  5171.         CAUTIONS and ADDITIONAL NOTES
  5172.  
  5173.           The window "wn" automatically becomes the top window tile upon 
  5174.           return.
  5175.  
  5176.  
  5177.  
  5178.  
  5179.                                                            Page: 84
  5180.                                                      The Window BOSS
  5181.  
  5182.  
  5183.  
  5184.         10.36. wn_dborder -- draw (replace) border on window
  5185.  
  5186.         USAGE
  5187.  
  5188.           wn_dborder(wn, ul, ur, tb, sd, ll, lr);
  5189.           WINDOWPTR wn;
  5190.           int ul, ur, tb, sd, ll, lr;
  5191.  
  5192.             wn - window handle
  5193.             ul - upper left corner character
  5194.             ur - upper right corner character
  5195.             tb - top/bottom line character
  5196.             sd - left/right side character
  5197.             ll - lower left corner character
  5198.             lr - lower right corner character
  5199.  
  5200.           The currently defined border attribute is used when drawing the 
  5201.           border.
  5202.  
  5203.         RETURNS
  5204.  
  5205.           TRUE or NULL if error
  5206.  
  5207.         CAUTIONS and ADDITIONAL NOTES
  5208.  
  5209.           The window "wn" automatically becomes the top window tile upon 
  5210.           return.
  5211.  
  5212.  
  5213.  
  5214.  
  5215.  
  5216.  
  5217.  
  5218.  
  5219.  
  5220.  
  5221.  
  5222.  
  5223.  
  5224.  
  5225.  
  5226.  
  5227.  
  5228.  
  5229.  
  5230.  
  5231.  
  5232.  
  5233.  
  5234.  
  5235.  
  5236.  
  5237.  
  5238.  
  5239.  
  5240.                                                            Page: 85
  5241.                                                      The Window BOSS
  5242.  
  5243.  
  5244.  
  5245.         10.37. wn_input -- general purpose window input
  5246.  
  5247.         USAGE
  5248.  
  5249.           wn_input(wn, row, col, prmpt, mask, fill, atrib, ubuff,hlpmsg)
  5250.           
  5251.              (WINDOWPTR) wn  - window pointer
  5252.              int        row  - row in window where prompt is displayed
  5253.              int        col  - col in window where prompt is displayed
  5254.              char *    prmpt - field prompt 
  5255.              char *    mask  - data entry mask
  5256.              char      fill  - fill character
  5257.              unsigned  atrib - attributes to be used 
  5258.                                (fground<<4 | background)
  5259.              char *    ubuff - user text buffer of MAXSTR size
  5260.              char *    hlpmsg- user help message - displayed
  5261.                                when HELP is pressed.  F1 is the default 
  5262.                                HELP key.  This can be changed by calling 
  5263.                                the wn_shkey() function.
  5264.             
  5265.              wn_input is the Data Clerk's kernel. It is called by  
  5266.              virtually all the higher level data entry functions.
  5267.           
  5268.         RETURNS:
  5269.           
  5270.              NULL if error, else non zero value (ASCII value of last 
  5271.              valid exit key).
  5272.  
  5273.              Sets the global "wns_escape" to TRUE if the ESCape key was 
  5274.              pressed causing wn_input to terminate. Set to FALSE 
  5275.              otherwise.
  5276.           
  5277.         CAUTIONS and ADDITIONAL NOTES:
  5278.           
  5279.              prmpt - If a prompt message is not to be provided, wn_input 
  5280.                      should be called with NSTR (null string) in  the 
  5281.                      place of the prompt message text pointer, for 
  5282.                      example:
  5283.           
  5284.                       wn_input(wn,row,col,NSTR,mask,fill,atrib,ubuff,hlpmsg)
  5285.                                           +--+
  5286.                      #defined in winboss.h --^
  5287.           
  5288.                      The prompt is displayed with the current window 
  5289.                      attributes at the row and column specified in the 
  5290.                      call. Data entry begins immediately after the 
  5291.                      prompt.
  5292.  
  5293.  
  5294.  
  5295.  
  5296.  
  5297.  
  5298.  
  5299.  
  5300.  
  5301.                                                            Page: 86
  5302.                                                      The Window BOSS
  5303.  
  5304.  
  5305.  
  5306.         wn_input -- continued.
  5307.  
  5308.  
  5309.  
  5310.              mask -  The mask determines what type of data may be entered 
  5311.                      on a character by character basis.  The control 
  5312.                      characters are as follows:
  5313.           
  5314.                       # - Number (0 thru 9, -, +)
  5315.                       a - Any ASCII character 
  5316.                           (0x01 thru 0xff excluding 0x08)
  5317.                       x - Same as 'a', but without echo (password)
  5318.                       t - Any printable ASCII char (' ' thru '~')
  5319.                       l - lower case character (a thru z)
  5320.                       u - upper case character (A thru Z)
  5321.                       Mask Examples:
  5322.           
  5323.                        Date Mask           "##/##/##"
  5324.                        Time Mask           "##:##:##"
  5325.                        Integer Mask        "#######"
  5326.                        Float Mask          "FFFF.FF"
  5327.                        Phone Number        "(###) ###-####"
  5328.                        Upper Case Mask     "uuuuu" or "UUUUU"
  5329.                        Lower Case Mask     "lllll" or "LLLLL"
  5330.                        ASCII Mask          "aaaaa" or "AAAAA"
  5331.                        No Echo ASCII       "xxxxx" or "XXXXX"
  5332.                        Text Mask           "ttttt" or "TTTTT"
  5333.           
  5334.              fill -  The character to be used to fill the field where 
  5335.                      mask characters appear.  The typical choice for fill 
  5336.                      char is '_'.
  5337.           
  5338.              help  - If a HELP message is not to be provided, wn_input 
  5339.                      should be called with NSTR (null string) in the 
  5340.                      place of the help message text pointer, for example:
  5341.           
  5342.                       wn_input(wn,row,col,NSTR,mask,fill,atrib,ubuff,NSTR)
  5343.                                                                      +--+
  5344.                                                #defined in winboss.h --^
  5345.                     
  5346.                      wn_ihmsg is called to display this message whenever 
  5347.                      the HELP key is depressed while the cursor is in the 
  5348.                      field.  F1 is the default HELP key.  This can be 
  5349.                      changed by calling the wn_shkey() function.
  5350.           
  5351.  
  5352.  
  5353.  
  5354.  
  5355.  
  5356.  
  5357.  
  5358.  
  5359.  
  5360.  
  5361.  
  5362.                                                            Page: 87
  5363.                                                      The Window BOSS
  5364.  
  5365.  
  5366.  
  5367.         wn_input -- continued.
  5368.  
  5369.  
  5370.  
  5371.              ubuff - Editing buffer.  Must be of sufficient size to hold 
  5372.                      the data as it is entered.  Typical size is the 
  5373.                      length of the mask + 2 bytes (strlen(mask)+2). 
  5374.                      Maximum length is MAXSTR.
  5375.           
  5376.                      On entry the first byte of ubuff should be a null, 
  5377.                      otherwise wn_input assumes there is valid data there 
  5378.                      and will enter edit mode.  This can be handy if 
  5379.                      there is a need for prefilled, but editable fields.  
  5380.                      In actual practice, wn_input uses this buffer for 
  5381.                      both initial character data entry and subsequent 
  5382.                      editing.
  5383.           
  5384.                      On return, ubuff contains the actual data entered in 
  5385.                      character format with fill and mask characters as 
  5386.                      spaces (e.g. "Now is the time          "). 
  5387.  
  5388.                      ubuff is returned left justified for non numeric 
  5389.                      masks.  If a completely numeric mask (#) was 
  5390.                      specified and the mask does not contain any other 
  5391.                      characters, ubuff is returned right justified.  
  5392.  
  5393.  
  5394.  
  5395.  
  5396.  
  5397.  
  5398.  
  5399.  
  5400.  
  5401.  
  5402.  
  5403.  
  5404.  
  5405.  
  5406.  
  5407.  
  5408.  
  5409.  
  5410.  
  5411.  
  5412.  
  5413.  
  5414.  
  5415.  
  5416.  
  5417.  
  5418.  
  5419.  
  5420.  
  5421.  
  5422.  
  5423.                                                            Page: 88
  5424.                                                      The Window BOSS
  5425.  
  5426.  
  5427.  
  5428.         wn_input -- continued.
  5429.  
  5430.  
  5431.  
  5432.              Editing Keys
  5433.  
  5434.                      Pressing the ESCape, RETURN/ENTER, UARROW, or DARROW 
  5435.                      key terminates input.  Since wn_input can be called 
  5436.                      alone, or from any of the custom data entry routines 
  5437.                      wn_gint, (wn_gfloat via wn_frmget), etc., wn_input 
  5438.                      must be able to exit in a variety of ways. If 
  5439.                      wn_input has been called as the result of a call to 
  5440.                      wn_frmget, the UARROW and DARROW keys move to the 
  5441.                      previous and next fields respectively.  The global 
  5442.                      wns_escape is set to TRUE if the ESCape key caused 
  5443.                      wn_input to terminate (set to FALSE otherwise).
  5444.  
  5445.                      Backspace and the cursor RIGHT ARROW and LEFT ARROW 
  5446.                      can be used to move the cursor one position at a 
  5447.                      time during entry. Control+RIGHT ARROW and 
  5448.                      Control+LEFT ARROW move the cursor to the 
  5449.                      previous/next word. The space bar can also be 
  5450.                      pressed when entering numeric fields provided that 
  5451.                      no "digits", "+", or "-" has been struck. Naturally, 
  5452.                      the HOME and END key work in a predictable fashion 
  5453.                      as do the INSert and DELete keys. The HOME key 
  5454.                      positions the cursor at the start of the field, END 
  5455.                      to end of the field.  The INSert key inserts a space 
  5456.                      at the current cursor position (pushing the contents 
  5457.                      of the field to the right.  DELete deletes the 
  5458.                      character at the cursor location (dragging the 
  5459.                      contents of the field to the left).
  5460.           
  5461.                      When the field fills and RETURN/ENTER has not been 
  5462.                      struck, the cursor waits at the end of the field for 
  5463.                      RETURN/ENTER to be pressed.  You may also press 
  5464.                      Backspace, HOME, or LEFT ARROW - these allow the 
  5465.                      field to be edited again.
  5466.  
  5467.                      The cursor shape indicates whether or not data can 
  5468.                      be entered, or if you are beyond the fields edge.  
  5469.                      The cursor is half size (bottom half) when data can 
  5470.                      be entered, and half size (top half) when you are 
  5471.                      beyond the edge of the field.
  5472.           
  5473.                      BELLs automatically ring when you strike an invalid 
  5474.                      key or attempt to enter data beyond the edge of the 
  5475.                      field.  
  5476.  
  5477.  
  5478.  
  5479.  
  5480.  
  5481.  
  5482.  
  5483.  
  5484.                                                            Page: 89
  5485.                                                      The Window BOSS
  5486.  
  5487.  
  5488.  
  5489.         wn_input -- continued.
  5490.  
  5491.  
  5492.  
  5493.              Miscellaneous
  5494.           
  5495.                      Choose your fill character wisely, as you can not 
  5496.                      enter that character as data in a field.  
  5497.           
  5498.                      The data entry routines are pointer intensive. 
  5499.                      Failure to insure that they are called with 
  5500.                      arguments of the right type, size, and dimension 
  5501.                      will certainly cause undesired results.
  5502.  
  5503.  
  5504.  
  5505.  
  5506.  
  5507.  
  5508.  
  5509.  
  5510.  
  5511.  
  5512.  
  5513.  
  5514.  
  5515.  
  5516.  
  5517.  
  5518.  
  5519.  
  5520.  
  5521.  
  5522.  
  5523.  
  5524.  
  5525.  
  5526.  
  5527.  
  5528.  
  5529.  
  5530.  
  5531.  
  5532.  
  5533.  
  5534.  
  5535.  
  5536.  
  5537.  
  5538.  
  5539.  
  5540.  
  5541.  
  5542.  
  5543.  
  5544.  
  5545.                                                            Page: 90
  5546.                                                      The Window BOSS
  5547.  
  5548.  
  5549.  
  5550.         10.38. wn_frmopn -- open data entry form
  5551.  
  5552.         USAGE
  5553.  
  5554.           wn_frmopn(nfields)
  5555.           
  5556.              int     nfields - number of fields in form plus 1.
  5557.  
  5558.         RETURNS:
  5559.           
  5560.              Pointer to an array of field control blocks. (WIFORM)
  5561.           
  5562.                 or
  5563.           
  5564.              NULL if error (memory could not be allocated)
  5565.           
  5566.         CAUTIONS and ADDITIONAL NOTES:
  5567.           
  5568.              If wn_frmopn returns NULL, no attempt should be made to use 
  5569.              the data entry form in question.  NULL indicates that memory 
  5570.              could not be allocated for the form!
  5571.               
  5572.              This routine must be called before  wn_frmget and wn_frmcls.
  5573.  
  5574.              If your form contains 4 fields the call wn_frmopn as 
  5575.              follows:
  5576.  
  5577.                 WIFORM frm;
  5578.                   
  5579.                   frm = wn_frmopn(5);
  5580.  
  5581.              Fields are sequentially numbered starting from 0 ending at 
  5582.              nfields-2.  The extra field is used for internal purposes.
  5583.  
  5584.              Refer to "SAMPLE.C" for example(s) of usage.
  5585.  
  5586.  
  5587.  
  5588.  
  5589.  
  5590.  
  5591.  
  5592.  
  5593.  
  5594.  
  5595.  
  5596.  
  5597.  
  5598.  
  5599.  
  5600.  
  5601.  
  5602.  
  5603.  
  5604.  
  5605.  
  5606.                                                            Page: 91
  5607.                                                      The Window BOSS
  5608.  
  5609.  
  5610.  
  5611.         10.39. wn_frmget -- get (read) data entry form
  5612.  
  5613.         USAGE
  5614.  
  5615.           wn_frmget(frm)
  5616.           
  5617.              WIFORM   frm - valid field pointer.
  5618.           
  5619.         RETURNS:
  5620.           
  5621.              TRUE  - indicating all fields of the form in question have 
  5622.                      been fetched and verified (where required).
  5623.  
  5624.              ESC_CODE - indicating ESCape was pressed and form processing
  5625.                      was terminated.
  5626.           
  5627.                 or
  5628.           
  5629.              Never Returns!!
  5630.           
  5631.         CAUTIONS and ADDITIONAL NOTES:
  5632.           
  5633.              As provided, wn_frmget is very usable, however, you may wish 
  5634.              to modify it (source has been provided for this purpose) to 
  5635.              include some of your own custom forms or the way in which 
  5636.              forms are processed when completed. 
  5637.  
  5638.              As distributed, wn_frmget first displays all field prompts 
  5639.              and then positions to the first field, performs data entry 
  5640.              on a field by field basis from the first to the last 
  5641.              (allowing editing along the way), asks for a confirmation to 
  5642.              accept the fields on the form after the last field is 
  5643.              entered, either accepts the form, or drops into edit mode 
  5644.              for all the fields on the form starting at the first field.
  5645.  
  5646.              Refer to wn_input for a discussion of editing keys during 
  5647.              data entry.
  5648.           
  5649.              wn_frmget will not return unless ESCape is pressed or  all 
  5650.              data has been entered and verified (where required).
  5651.               
  5652.              This routine must be called after wn_frmopn, and before 
  5653.              wn_frmcls.
  5654.  
  5655.              Refer to "SAMPLE.C" for example(s) of usage.
  5656.  
  5657.  
  5658.  
  5659.  
  5660.  
  5661.  
  5662.  
  5663.  
  5664.  
  5665.  
  5666.  
  5667.                                                            Page: 92
  5668.                                                      The Window BOSS
  5669.  
  5670.  
  5671.  
  5672.         10.40. wn_frmcls -- close data entry form
  5673.  
  5674.         USAGE
  5675.  
  5676.              wn_frmcls(frm)
  5677.           
  5678.              (WIFORM) frm - pointer to an array of field control blocks
  5679.           
  5680.         RETURNS:
  5681.           
  5682.              TRUE 
  5683.           
  5684.         CAUTIONS and ADDITIONAL NOTES:
  5685.           
  5686.              This routine should only be called if memory is scarce or 
  5687.              there is no further need for the form you wish to close.  
  5688.              Once a form is closed, all traces of it vanish, the only way 
  5689.              to get it back is to start from scratch with wn_frmopn, 
  5690.              wn_frmget and so on.
  5691.  
  5692.              Closing a form has no impact on its visual image, just its 
  5693.              logical existence. If you wish to make a form vanish both 
  5694.              logically and visually - close the window it is anchored to 
  5695.              after, and only after, closing the form.
  5696.  
  5697.              In this release, a form is not automatically closed when the 
  5698.              window to which it is anchored is closed.  
  5699.  
  5700.              Refer to "SAMPLE.C" for example(s) of usage.
  5701.  
  5702.  
  5703.  
  5704.  
  5705.  
  5706.  
  5707.  
  5708.  
  5709.  
  5710.  
  5711.  
  5712.  
  5713.  
  5714.  
  5715.  
  5716.  
  5717.  
  5718.  
  5719.  
  5720.  
  5721.  
  5722.  
  5723.  
  5724.  
  5725.  
  5726.  
  5727.  
  5728.                                                            Page: 93
  5729.                                                      The Window BOSS
  5730.  
  5731.  
  5732.  
  5733.         10.41. wn_gdate - input date in window (MM/DD/YY)
  5734.  
  5735.         USAGE
  5736.  
  5737.           wn_gdate(fun,frm,fld,wn,row,col,prmpt,atrib,fill,month,day,year,
  5738.                    ubuff,hlpmsg,errmsg)
  5739.           
  5740.              int        fun - function code (SET || XEQ)
  5741.              (WIFORM)   frm - form pointer  (actual || NFRM)
  5742.              int        fld - field # in form (actual || NULL)
  5743.              (WINDOWPTR) wn - window pointer
  5744.              int        row - row in window where data input begins
  5745.              int        col - col in window where data input begins
  5746.              (char *) prmpt - field prompt (call with NSTR for none)
  5747.              unsigned atrib - field (not prompt) attributes 
  5748.              char      fill - field fill character
  5749.              (int *)  month - pointer to int for month (1-12)
  5750.              (int *)    day - pointer to int for day (1-31)
  5751.              (int *)   year - pointer to int for year (0-99)
  5752.              (char *) ubuff - pointer to char array of 10 bytes 
  5753.              (char *)hlpmsg - pointer to help message 
  5754.                               (call with NSTR for none)
  5755.              (char *)errmsg - pointer to err message
  5756.                               (call with NSTR for none)
  5757.           
  5758.         RETURNS:
  5759.           
  5760.              month, day, and year via pointers.
  5761.           
  5762.              NULL if error, else the non zero value returned from 
  5763.              wn_input.
  5764.  
  5765.              "wns_escape" is set to TRUE if the ESCape key caused 
  5766.              wn_input to terminate.  Set to FALSE otherwise.
  5767.           
  5768.         CAUTIONS and ADDITIONAL NOTES:
  5769.           
  5770.              fun - fun can only be SET for form setup, or XEQ for 
  5771.                    immediate execution.  When called with SET, valid 
  5772.                    arguments for both "frm" and "fld" must be specified.  
  5773.                    frm is the field pointer returned from wn_frmopn(), and 
  5774.                    fld is the field sequence number in the form for this 
  5775.                    field.  When called with XEQ frm must be NFRM and fld 
  5776.                    must be NFLD.
  5777.           
  5778.             ubuff - Editing buffer.  Must be of sufficient size to hold 
  5779.                    the data as it is entered.  Minimum size is 10.
  5780.           
  5781.  
  5782.  
  5783.  
  5784.  
  5785.  
  5786.  
  5787.  
  5788.  
  5789.                                                            Page: 94
  5790.                                                      The Window BOSS
  5791.  
  5792.  
  5793.  
  5794.         wn_gdate continued.
  5795.  
  5796.  
  5797.  
  5798.                    On entry, the first byte of ubuff should be a null, 
  5799.                    otherwise wn_input assumes there is valid data there 
  5800.                    and will enter edit mode.  This can be handy if there 
  5801.                    is a need for prefilled, but editable fields.  In 
  5802.                    actual practice, wn_input uses this buffer for both 
  5803.                    initial character data entry and subsequent editing.
  5804.  
  5805.                    On return, ubuff contains the actual data entered in 
  5806.                    character format with fill and mask characters as 
  5807.                    spaces (e.g. "12 12 88").
  5808.  
  5809.              Only basic reasonability checks are made.  Therefore, dates 
  5810.              like 02/31/88 can be returned.
  5811.           
  5812.              Calls wn_input to perform data entry.
  5813.           
  5814.              Data must satisfy validation checks for function to return.
  5815.  
  5816.              Refer to "SAMPLE.C" for example(s) of usage.
  5817.  
  5818.  
  5819.  
  5820.  
  5821.  
  5822.  
  5823.  
  5824.  
  5825.  
  5826.  
  5827.  
  5828.  
  5829.  
  5830.  
  5831.  
  5832.  
  5833.  
  5834.  
  5835.  
  5836.  
  5837.  
  5838.  
  5839.  
  5840.  
  5841.  
  5842.  
  5843.  
  5844.  
  5845.  
  5846.  
  5847.  
  5848.  
  5849.  
  5850.                                                            Page: 95
  5851.                                                      The Window BOSS
  5852.  
  5853.  
  5854.  
  5855.         10.42. wn_gedate - input European date in window (DD/MM/YY)
  5856.  
  5857.         USAGE
  5858.  
  5859.           wn_gedate(fun,frm,fld,wn,row,col,prmpt,atrib,fill,day,month,year,
  5860.                    ubuff,hlpmsg,errmsg)
  5861.           
  5862.              int        fun - function code (SET || XEQ)
  5863.              (WIFORM)   frm - form pointer  (actual || NFRM)
  5864.              int        fld - field # in form (actual || NULL)
  5865.              (WINDOWPTR) wn - window pointer
  5866.              int        row - row in window where data input begins
  5867.              int        col - col in window where data input begins
  5868.              (char *) prmpt - field prompt (call with NSTR for none)
  5869.              unsigned atrib - field (not prompt) attributes 
  5870.              char      fill - field fill character
  5871.              (int *)    day - pointer to int for day (1-31)
  5872.              (int *)  month - pointer to int for month (1-12)
  5873.              (int *)   year - pointer to int for year (0-99)
  5874.              (char *) ubuff - pointer to char array of 10 bytes 
  5875.              (char *)hlpmsg - pointer to help message 
  5876.                               (call with NSTR for none)
  5877.              (char *)errmsg - pointer to err message
  5878.                               (call with NSTR for none)
  5879.           
  5880.         RETURNS:
  5881.           
  5882.              day, month, and year via pointers.
  5883.           
  5884.              NULL if error, else the non zero value returned from 
  5885.              wn_input.
  5886.  
  5887.              "wns_escape" is set to TRUE if the ESCape key caused 
  5888.              wn_input to terminate.  Set to FALSE otherwise.
  5889.           
  5890.         CAUTIONS and ADDITIONAL NOTES:
  5891.           
  5892.              fun - fun can only be SET for form setup, or XEQ for 
  5893.                    immediate execution.  When called with SET, valid 
  5894.                    arguments for both "frm" and "fld" must be specified.  
  5895.                    frm is the field pointer returned from wn_frmopn(), and 
  5896.                    fld is the field sequence number in the form for this 
  5897.                    field.  When called with XEQ frm must be NFRM and fld 
  5898.                    must be NFLD.
  5899.           
  5900.             ubuff - Editing buffer.  Must be of sufficient size to hold 
  5901.                    the data as it is entered.  Minimum size is 10.
  5902.           
  5903.  
  5904.  
  5905.  
  5906.  
  5907.  
  5908.  
  5909.  
  5910.  
  5911.                                                            Page: 96
  5912.                                                      The Window BOSS
  5913.  
  5914.  
  5915.  
  5916.         wn_gedate continued.
  5917.  
  5918.  
  5919.  
  5920.                    On entry, the first byte of ubuff should be a null, 
  5921.                    otherwise wn_input assumes there is valid data there 
  5922.                    and will enter edit mode.  This can be handy if there 
  5923.                    is a need for prefilled, but editable fields.  In 
  5924.                    actual practice, wn_input uses this buffer for both 
  5925.                    initial character data entry and subsequent editing.
  5926.  
  5927.                    On return, ubuff contains the actual data entered in 
  5928.                    character format with fill and mask characters as 
  5929.                    spaces (e.g. "29 02 88").
  5930.  
  5931.              Only basic reasonability checks are made.  Therefore, dates 
  5932.              like 30/02/88 can be returned.
  5933.           
  5934.              Calls wn_input to perform data entry.
  5935.           
  5936.              Data must satisfy validation checks for function to return.
  5937.  
  5938.              Refer to "SAMPLE.C" for example(s) of usage.
  5939.  
  5940.  
  5941.  
  5942.  
  5943.  
  5944.  
  5945.  
  5946.  
  5947.  
  5948.  
  5949.  
  5950.  
  5951.  
  5952.  
  5953.  
  5954.  
  5955.  
  5956.  
  5957.  
  5958.  
  5959.  
  5960.  
  5961.  
  5962.  
  5963.  
  5964.  
  5965.  
  5966.  
  5967.  
  5968.  
  5969.  
  5970.  
  5971.  
  5972.                                                            Page: 97
  5973.                                                      The Window BOSS
  5974.  
  5975.  
  5976.  
  5977.         10.43. wn_gtime -- input time in window
  5978.  
  5979.         USAGE
  5980.  
  5981.           wn_gtime(fun,frm,fld,wn,row,col,prmpt,atrib,fill,hrs,mins,
  5982.                    secs,ubuff,hlpmsg,errmsg)
  5983.           
  5984.              int        fun - function code (SET || XEQ)
  5985.              (WIFORM)   frm - form pointer  (actual || NFRM)
  5986.              int        fld - field # in form (actual || NFLD)
  5987.              (WINDOWPTR) wn - window pointer
  5988.              int        row - row in window where data input begins
  5989.              int        col - col in window where data input begins
  5990.              (char *) prmpt - field prompt (call with NSTR for none)
  5991.              unsigned atrib - field (not prompt) attributes 
  5992.              char      fill - field fill character
  5993.              (int *)    hrs - pointer to int for hours (0-24)
  5994.              (int *)   mins - pointer to int for minutes (0-59)
  5995.              (int *)   secs - pointer to int for seconds (0-59)
  5996.              (char *) ubuff - pointer to char array of 10 bytes 
  5997.              (char *)hlpmsg - pointer to help message 
  5998.                               (call with NSTR for none)
  5999.              (char *)errmsg - pointer to err message 
  6000.                               (call with NSTR for none)
  6001.           
  6002.         RETURNS:
  6003.           
  6004.              hrs, mins, and secs via pointers.
  6005.           
  6006.              NULL if error, else the non zero value returned from  
  6007.              wn_input.
  6008.           
  6009.              "wns_escape" is set to TRUE if the ESCape key caused 
  6010.              wn_input to terminate.  Set to FALSE otherwise.
  6011.  
  6012.         CAUTIONS and ADDITIONAL NOTES:
  6013.           
  6014.              fun - fun can only be SET for form setup, or XEQ for 
  6015.                    immediate execution.  When called with SET, valid 
  6016.                    arguments for both "frm" and "fld" must be specified.  
  6017.                    frm is the field pointer returned from wn_frmopn(), and 
  6018.                    fld is the field sequence number in the form for this 
  6019.                    field.  When called with XEQ frm must be NFRM and fld 
  6020.                    must be NFLD.
  6021.           
  6022.  
  6023.  
  6024.  
  6025.  
  6026.  
  6027.  
  6028.  
  6029.  
  6030.  
  6031.  
  6032.  
  6033.                                                            Page: 98
  6034.                                                      The Window BOSS
  6035.  
  6036.  
  6037.  
  6038.         wn_gtime - continued.
  6039.  
  6040.  
  6041.              
  6042.              ubuff - Editing buffer.  Must be of sufficient size to hold 
  6043.                    the data as it is entered.  Minimum size is 10.
  6044.           
  6045.                    On entry, the first byte of ubuff should be a null, 
  6046.                    otherwise wn_input assumes there is valid data there 
  6047.                    and will enter edit mode.  This can be handy if there 
  6048.                    is a need for prefilled, but editable fields.  In 
  6049.                    actual practice, wn_input uses this buffer for both 
  6050.                    initial character data entry and subsequent editing.
  6051.  
  6052.                     On return, ubuff contains the actual data entered in 
  6053.                     character format with fill and mask characters as 
  6054.                     spaces (e.g. "23 59 22").
  6055.           
  6056.              Only basic reasonability checks are made.  Therefore, times 
  6057.              like 24:59:59 can be returned.
  6058.           
  6059.              Calls wn_input to perform data entry.
  6060.           
  6061.              Data must satisfy validation checks for function to return.
  6062.  
  6063.              Refer to "SAMPLE.C" for example(s) of usage.
  6064.  
  6065.  
  6066.  
  6067.  
  6068.  
  6069.  
  6070.  
  6071.  
  6072.  
  6073.  
  6074.  
  6075.  
  6076.  
  6077.  
  6078.  
  6079.  
  6080.  
  6081.  
  6082.  
  6083.  
  6084.  
  6085.  
  6086.  
  6087.  
  6088.  
  6089.  
  6090.  
  6091.  
  6092.  
  6093.  
  6094.                                                            Page: 99
  6095.                                                      The Window BOSS
  6096.  
  6097.  
  6098.  
  6099.         10.44. wn_gphone -- input phone number in window
  6100.  
  6101.         USAGE
  6102.  
  6103.           wn_gphone(fun,frm,fld,wn,row,col,prmpt,atrib,fill,acode,
  6104.                     nnx,num,ubuff,hlpmsg,errmsg)
  6105.           
  6106.              int        fun - function code (SET || XEQ)
  6107.              (WIFORM)   frm - form pointer  (actual || NFRM)
  6108.              int        fld - field # in form (actual || NFLD)
  6109.              (WINDOWPTR) wn - window pointer
  6110.              int        row - row in window where data input begins
  6111.              int        col - col in window where data input begins
  6112.              (char *) prmpt - field prompt (call with NSTR for none)
  6113.              unsigned atrib - field (not prompt) attributes 
  6114.              char      fill - field fill character
  6115.              (int *)  acode - pointer to int for area code (3 digits)
  6116.              (int *)    nnx - pointer to int for nnx (3 digits)
  6117.              (int *)    num - pointer to int for number (4 digits)
  6118.              (char *) ubuff - pointer to char array of 18 bytes 
  6119.              (char *)hlpmsg - pointer to help message 
  6120.                               (call with NSTR for none)
  6121.              (char *)errmsg - pointer to err message 
  6122.                               (call with NSTR for none)
  6123.           
  6124.         RETURNS:
  6125.           
  6126.              acode, nnx, and num via pointers.
  6127.           
  6128.              NULL if error, else the non zero value returned from 
  6129.              wn_input.
  6130.                
  6131.              "wns_escape" is set to TRUE if the ESCape key caused 
  6132.              wn_input to terminate.  Set to FALSE otherwise.
  6133.  
  6134.         CAUTIONS and ADDITIONAL NOTES:
  6135.           
  6136.              fun - fun can only be SET for form setup, or XEQ for 
  6137.                    immediate execution.  When called with SET, valid 
  6138.                    arguments for both "frm" and "fld" must be specified.  
  6139.                    frm is the field pointer returned from wn_frmopn(), and 
  6140.                    fld is the field sequence number in the form for this 
  6141.                    field.  When called with XEQ frm must be NFRM and fld 
  6142.                    must be NFLD.
  6143.           
  6144.  
  6145.  
  6146.  
  6147.  
  6148.  
  6149.  
  6150.  
  6151.  
  6152.  
  6153.  
  6154.  
  6155.                                                            Page: 100
  6156.                                                      The Window BOSS
  6157.  
  6158.  
  6159.  
  6160.         wn_gphone - continued.  
  6161.  
  6162.  
  6163.  
  6164.              ubuff - Editing buffer.  Must be of sufficient size to hold 
  6165.                    the data as it is entered.  Minimum size is 18 bytes.
  6166.           
  6167.                    On entry, the first byte of ubuff should be a null, 
  6168.                    otherwise wn_input assumes there is valid data there 
  6169.                    and will enter edit mode.  This can be handy if there 
  6170.                    is a need for prefilled, but editable fields.  In 
  6171.                    actual practice, wn_input uses this buffer for both 
  6172.                    initial character data entry and subsequent editing.
  6173.  
  6174.                    On return, ubuff contains the actual data entered in 
  6175.                    character format with fill and mask characters as 
  6176.                    spaces (e.g. 800 555 1212).
  6177.           
  6178.             No validation is performed.
  6179.           
  6180.             Leaving the field blank returns 0 for ACODE, NNX, and NUM.
  6181.           
  6182.             Calls wn_input to perform data entry.
  6183.  
  6184.             Refer to "SAMPLE.C" for example(s) of usage.
  6185.  
  6186.  
  6187.  
  6188.  
  6189.  
  6190.  
  6191.  
  6192.  
  6193.  
  6194.  
  6195.  
  6196.  
  6197.  
  6198.  
  6199.  
  6200.  
  6201.  
  6202.  
  6203.  
  6204.  
  6205.  
  6206.  
  6207.  
  6208.  
  6209.  
  6210.  
  6211.  
  6212.  
  6213.  
  6214.  
  6215.  
  6216.                                                            Page: 101
  6217.                                                      The Window BOSS
  6218.  
  6219.  
  6220.  
  6221.         10.45. wn_gssn -- input social security number in window
  6222.  
  6223.         USAGE
  6224.  
  6225.           wn_gssn(fun,frm,fld,wn,row,col,prmpt,atrib,fill,n1,
  6226.                     n2,n3,ubuff,hlpmsg,errmsg)
  6227.           
  6228.              int        fun - function code (SET || XEQ)
  6229.              (WIFORM)   frm - form pointer  (actual || NFRM)
  6230.              int        fld - field # in form (actual || NFLD)
  6231.              (WINDOWPTR) wn - window pointer
  6232.              int        row - row in window where data input begins
  6233.              int        col - col in window where data input begins
  6234.              (char *) prmpt - field prompt (call with NSTR for none)
  6235.              unsigned atrib - field (not prompt) attributes 
  6236.              char      fill - field fill character
  6237.              (int *)     n1 - pointer to int for 1st part of ssn     
  6238.              (int *)     n2 - pointer to int for 2nd part of ssn
  6239.              (int *)     n3 - pointer to int for 3rd part of ssn  
  6240.              (char *) ubuff - pointer to char array of 13 bytes 
  6241.              (char *)hlpmsg - pointer to help message 
  6242.                               (call with NSTR for none)
  6243.              (char *)errmsg - pointer to err message 
  6244.                               (call with NSTR for none)
  6245.           
  6246.         RETURNS:
  6247.           
  6248.              Social security number in three parts: n1,n2,n3 via pointers.
  6249.           
  6250.              NULL if error, else the non zero value returned from 
  6251.              wn_input.
  6252.                
  6253.              "wns_escape" is set to TRUE if the ESCape key caused 
  6254.              wn_input to terminate.  Set to FALSE otherwise.
  6255.  
  6256.         CAUTIONS and ADDITIONAL NOTES:
  6257.           
  6258.              fun - fun can only be SET for form setup, or XEQ for 
  6259.                    immediate execution.  When called with SET, valid 
  6260.                    arguments for both "frm" and "fld" must be specified.  
  6261.                    frm is the field pointer returned from wn_frmopn(), and 
  6262.                    fld is the field sequence number in the form for this 
  6263.                    field.  When called with XEQ frm must be NFRM and fld 
  6264.                    must be NFLD.
  6265.           
  6266.  
  6267.  
  6268.  
  6269.  
  6270.  
  6271.  
  6272.  
  6273.  
  6274.  
  6275.  
  6276.  
  6277.                                                            Page: 102
  6278.                                                      The Window BOSS
  6279.  
  6280.  
  6281.  
  6282.         wn_gssn - continued.  
  6283.  
  6284.                      
  6285.  
  6286.              ubuff - Editing buffer.  Must be of sufficient size to hold 
  6287.                    the data as it is entered.  Minimum size is 13 bytes.
  6288.           
  6289.                    On entry, the first byte of ubuff should be a null, 
  6290.                    otherwise wn_input assumes there is valid data there 
  6291.                    and will enter edit mode.  This can be handy if there 
  6292.                    is a need for prefilled, but editable fields.  In 
  6293.                    actual practice, wn_input uses this buffer for both 
  6294.                    initial character data entry and subsequent editing.
  6295.  
  6296.                    On return, ubuff contains the actual data entered in 
  6297.                    character format with fill and mask characters as 
  6298.                    spaces (e.g. 045 12 8971).
  6299.           
  6300.             No validation is performed.
  6301.           
  6302.             Leaving the field blank returns 0 for N1, N2, and N3
  6303.  
  6304.             Calls wn_input to perform data entry.
  6305.  
  6306.             Refer to "SAMPLE.C" for example(s) of usage.
  6307.  
  6308.  
  6309.  
  6310.  
  6311.  
  6312.  
  6313.  
  6314.  
  6315.  
  6316.  
  6317.  
  6318.  
  6319.  
  6320.  
  6321.  
  6322.  
  6323.  
  6324.  
  6325.  
  6326.  
  6327.  
  6328.  
  6329.  
  6330.  
  6331.  
  6332.  
  6333.  
  6334.  
  6335.  
  6336.  
  6337.  
  6338.                                                            Page: 103
  6339.                                                      The Window BOSS
  6340.  
  6341.  
  6342.  
  6343.         10.46. wn_gtext -- input text in window
  6344.         10.47. wn_gutext -- input upper case text in window
  6345.         10.48. wn_gltext -- input lower case text in window
  6346.         10.49. wn_gatext -- input text & graphics characters  
  6347.  
  6348.         USAGE
  6349.  
  6350.           wn_gtext(fun,frm,fld,wn,row,col,prmpt,atrib,fill,fwidth,
  6351.                    ubuff,hlpmsg,errmsg)
  6352.           wn_gutext(..same as wn_gtext)
  6353.           wn_gltext(..same as wn_gtext)
  6354.           wn_gatext(..same as wn_gtext)
  6355.  
  6356.              int        fun - function code (SET || XEQ)
  6357.              (WIFORM)   frm - form pointer  (actual || NFRM)
  6358.              int        fld - field # in form (actual || NFLD)
  6359.              (WINDOWPTR) wn - window pointer
  6360.              int        row - row in window where data input begins
  6361.              int        col - col in window where data input begins
  6362.              (char *) prmpt - field prompt (call with NSTR for none)
  6363.              unsigned atrib - field (not prompt) attributes 
  6364.              char      fill - field fill character
  6365.              int     fwidth - width of mask (maximum # of digits is MAXSTR)
  6366.              (char *) ubuff - pointer to char array of fwidth+2 bytes 
  6367.              (char *)hlpmsg - pointer to help message 
  6368.                               (call with NSTR for none)
  6369.              (char *)errmsg - pointer to err message 
  6370.                               (call with NSTR for none)
  6371.           
  6372.         RETURNS:
  6373.           
  6374.              ubuff with text data via pointer.
  6375.           
  6376.              NULL if error, else the non zero value returned from 
  6377.              wn_input.
  6378.           
  6379.              "wns_escape" is set to TRUE if the ESCape key caused 
  6380.              wn_input to terminate.  Set to FALSE otherwise.
  6381.  
  6382.         CAUTIONS and ADDITIONAL NOTES:
  6383.  
  6384.              wn_gatext - wn_gatext allows graphics characters to be input.  It 
  6385.                    is otherwise identical to wn_gtext.
  6386.              
  6387.              fun - fun can only be SET for form setup, or XEQ for 
  6388.                    immediate execution.  When called with SET, valid 
  6389.                    arguments for both "frm" and "fld" must be specified.  
  6390.                    frm is the field pointer returned from wn_frmopn(), and 
  6391.                    fld is the field sequence number in the form for this 
  6392.                    field.  When called with XEQ frm must be NFRM and fld 
  6393.                    must be NFLD.
  6394.           
  6395.  
  6396.  
  6397.  
  6398.  
  6399.                                                            Page: 104
  6400.                                                      The Window BOSS
  6401.  
  6402.  
  6403.  
  6404.         wn_gtext - continued.
  6405.  
  6406.  
  6407.  
  6408.              ubuff - Editing buffer.  Must be of sufficient size to hold 
  6409.                     the data as it is entered.  Minimum size is fwidth+2.
  6410.           
  6411.                     On entry, the first byte of ubuff should be a null, 
  6412.                     otherwise wn_input assumes there is valid data there 
  6413.                     and will enter edit mode.  This can be handy if there 
  6414.                     is a need for prefilled, but editable fields.  In 
  6415.                     actual practice, wn_input uses this buffer for both 
  6416.                     initial character data entry and subsequent editing.
  6417.  
  6418.                     On return, ubuff contains the actual data entered in 
  6419.                     character format with fill and mask characters as 
  6420.                     spaces (e.g. "This is a line of text ").
  6421.  
  6422.                     Case conversion is automatically performed when 
  6423.                     wn_gutext() or wn_gltext() are called.
  6424.           
  6425.             Calls wn_input to perform data entry.
  6426.           
  6427.             No validation is performed.
  6428.  
  6429.             Parameters are not range checked.  
  6430.  
  6431.             Refer to "SAMPLE.C" for example(s) of usage.
  6432.  
  6433.  
  6434.  
  6435.  
  6436.  
  6437.  
  6438.  
  6439.  
  6440.  
  6441.  
  6442.  
  6443.  
  6444.  
  6445.  
  6446.  
  6447.  
  6448.  
  6449.  
  6450.  
  6451.  
  6452.  
  6453.  
  6454.  
  6455.  
  6456.  
  6457.  
  6458.  
  6459.  
  6460.                                                            Page: 105
  6461.                                                      The Window BOSS
  6462.  
  6463.  
  6464.  
  6465.         10.50. wn_gmltext -- input multi-line text in window
  6466.  
  6467.         USAGE
  6468.  
  6469.           wn_gmltext(fun,frm,fld,wn,row,col,prmpt,atrib,fill,fwidth,
  6470.                    nl,ubuff,hlpmsg,errmsg)
  6471.  
  6472.              int        fun - function code (SET || XEQ)
  6473.              (WIFORM)   frm - form pointer  (actual || NFRM)
  6474.              int        fld - field # in form (actual || NFLD)
  6475.              (WINDOWPTR) wn - window pointer
  6476.              int        row - row in window where data input begins
  6477.              int        col - col in window where data input begins
  6478.              (char *) prmpt - field prompt (call with NSTR for none)
  6479.              unsigned atrib - field (not prompt) attributes 
  6480.              char      fill - field fill character
  6481.              int     fwidth - width of mask (maximum # of digits is MAXSTR)
  6482.              int         nl - number of lines (height)
  6483.              (char **)ubuff - array of pointers to char arrays of fwidth+2 bytes 
  6484.              (char *)hlpmsg - pointer to help message 
  6485.                               (call with NSTR for none)
  6486.              (char *)errmsg - pointer to err message 
  6487.                               (call with NSTR for none)
  6488.           
  6489.         RETURNS:
  6490.           
  6491.              text in buffers pointed to by *ubuff[...].
  6492.           
  6493.              NULL if error, else the non zero value returned from 
  6494.              wn_input.
  6495.           
  6496.              "wns_escape" is set to TRUE if the ESCape key caused 
  6497.              wn_input to terminate.  Set to FALSE otherwise.
  6498.  
  6499.         CAUTIONS and ADDITIONAL NOTES:
  6500.  
  6501.              fun - fun can only be SET for form setup, or XEQ for 
  6502.                    immediate execution.  When called with SET, valid 
  6503.                    arguments for both "frm" and "fld" must be specified.  
  6504.                    frm is the field pointer returned from wn_frmopn(), and 
  6505.                    fld is the field sequence number in the form for this 
  6506.                    field.  When called with XEQ frm must be NFRM and fld 
  6507.                    must be NFLD.
  6508.           
  6509.  
  6510.  
  6511.  
  6512.  
  6513.  
  6514.  
  6515.  
  6516.  
  6517.  
  6518.  
  6519.  
  6520.  
  6521.                                                            Page: 106
  6522.                                                      The Window BOSS
  6523.  
  6524.  
  6525.  
  6526.         wn_gmltext - continued.
  6527.  
  6528.  
  6529.  
  6530.              ubuff - THIS IS AN ARRAY OF POINTERS!! EACH ELEMENT OF UBUFF 
  6531.                     IS A POINTER TO AN ARRAY OF CHARACTERS THAT ARE USED 
  6532.                     AS THE LINE BUFFERS FOR EACH LINE OF THE MULTI-LINE 
  6533.                     TEXT FIELD.  Each line buffer must be of sufficient 
  6534.                     size to hold the data as it is entered.  Minimum size 
  6535.                     is fwidth+2.
  6536.           
  6537.                     On entry, the first byte of of all of the line 
  6538.                     buffers pointed to by ubuff[...] should be a null, 
  6539.                     otherwise wn_input assumes there is valid data there 
  6540.                     and will enter edit mode.  This can be handy if there 
  6541.                     is a need for prefilled, but editable fields.  In 
  6542.                     actual practice, wn_input uses these line buffers for 
  6543.                     both initial character data entry and subsequent 
  6544.                     editing.
  6545.  
  6546.                     On return, the line buffers contain the actual data 
  6547.                     entered in character format with fill and mask 
  6548.                     characters as spaces, eg: "This is a line of text ".
  6549.  
  6550.                     Editing keys are the same as wn_input with logical 
  6551.                     extensions for the UP and DOWN ARROW cursor keys.  
  6552.                     Normally both the UP and DOWN ARROW keys terminate 
  6553.                     input, they behave slightly differently here.  
  6554.                     Pressing the UP ARROW cursor key moves to the 
  6555.                     previous line homing the cursor if one exists or 
  6556.                     terminates input if a previous line does not exist.  
  6557.                     The DOWN ARROW cursor key behaves in a similar 
  6558.                     fashion for the next line.
  6559.  
  6560.             Calls wn_input to perform data entry.
  6561.           
  6562.             No validation is performed.
  6563.  
  6564.             No parameter checks are performed.  Pay particular attention 
  6565.             to the values passed for both fwidth and nl.
  6566.  
  6567.             Refer to "SAMPLE.C" for example(s) of usage.
  6568.  
  6569.  
  6570.  
  6571.  
  6572.  
  6573.  
  6574.  
  6575.  
  6576.  
  6577.  
  6578.  
  6579.  
  6580.  
  6581.  
  6582.                                                            Page: 107
  6583.                                                      The Window BOSS
  6584.  
  6585.  
  6586.  
  6587.         10.51. wn_gpword -- input password in window
  6588.  
  6589.         USAGE
  6590.  
  6591.           wn_gpword(fun,frm,fld,wn,row,col,prmpt,atrib,fill,fwidth,
  6592.                    ubuff,hlpmsg,errmsg)
  6593.           
  6594.              int        fun - function code (SET || XEQ)
  6595.              (WIFORM)   frm - form pointer  (actual || NFRM)
  6596.              int        fld - field # in form (actual || NFLD)
  6597.              (WINDOWPTR) wn - window pointer
  6598.              int        row - row in window where data input begins
  6599.              int        col - col in window where data input begins
  6600.              (char *) prmpt - field prompt (call with NSTR for none)
  6601.              unsigned atrib - field (not prompt) attributes 
  6602.              char      fill - field fill character
  6603.              int     fwidth - width of mask (maximum # of digits is MAXSTR)
  6604.              (char *) ubuff - pointer to char array of fwidth+2 bytes 
  6605.              (char *)hlpmsg - pointer to help message 
  6606.                               (call with NSTR for none)
  6607.              (char *)errmsg - pointer to err message 
  6608.                               (call with NSTR for none)
  6609.           
  6610.         RETURNS:
  6611.           
  6612.              ubuff with text data via pointer.
  6613.           
  6614.              NULL if error, else the non zero value returned from 
  6615.              wn_input.
  6616.           
  6617.              "wns_escape" is set to TRUE if the ESCape key caused 
  6618.              wn_input to terminate.  Set to FALSE otherwise.
  6619.  
  6620.         CAUTIONS and ADDITIONAL NOTES:
  6621.           
  6622.              fun - fun can only be SET for form setup, or XEQ for 
  6623.                    immediate execution.  When called with SET, valid 
  6624.                    arguments for both "frm" and "fld" must be specified.  
  6625.                    frm is the field pointer returned from wn_frmopn(), and 
  6626.                    fld is the field sequence number in the form for this 
  6627.                    field.  When called with XEQ frm must be NFRM and fld 
  6628.                    must be NFLD.
  6629.           
  6630.              ubuff - Editing buffer.  Must be of sufficient size to hold 
  6631.                    the data as it is entered.  Minimum size is fwidth+2.
  6632.           
  6633.                    On entry, the first byte of ubuff should be a null. 
  6634.                    Since this function is for PASSWORD entry, editing is 
  6635.                    not available. The contents of the edit buffer on 
  6636.                    entry is ignored.
  6637.  
  6638.  
  6639.  
  6640.  
  6641.  
  6642.  
  6643.                                                            Page: 108
  6644.                                                      The Window BOSS
  6645.  
  6646.  
  6647.  
  6648.         wn_gpword - continued.
  6649.  
  6650.  
  6651.  
  6652.                     On return, ubuff contains the actual data entered in 
  6653.                     character format with fill and mask characters as 
  6654.                     spaces (e.g. "This is a line of text ").
  6655.           
  6656.             Calls wn_input to perform data entry.
  6657.           
  6658.             No validation is performed. 
  6659.  
  6660.  
  6661.  
  6662.  
  6663.  
  6664.  
  6665.  
  6666.  
  6667.  
  6668.  
  6669.  
  6670.  
  6671.  
  6672.  
  6673.  
  6674.  
  6675.  
  6676.  
  6677.  
  6678.  
  6679.  
  6680.  
  6681.  
  6682.  
  6683.  
  6684.  
  6685.  
  6686.  
  6687.  
  6688.  
  6689.  
  6690.  
  6691.  
  6692.  
  6693.  
  6694.  
  6695.  
  6696.  
  6697.  
  6698.  
  6699.  
  6700.  
  6701.  
  6702.  
  6703.  
  6704.                                                            Page: 109
  6705.                                                      The Window BOSS
  6706.  
  6707.  
  6708.  
  6709.         10.52. wn_gint -- input integer in window
  6710.  
  6711.         USAGE
  6712.  
  6713.            wn_gint(fun,frm,fld,wn,row,col,prmpt,atrib,fill,value,
  6714.                    fwidth,low,high,ubuff,hlpmsg,errmsg)
  6715.           
  6716.               int        fun - function code (SET || XEQ)
  6717.               (WIFORM)   frm - form pointer  (actual || NFRM)
  6718.               int        fld - field # in form (actual || NFLD)
  6719.               (WINDOWPTR) wn - window pointer
  6720.               int        row - row in window where data input begins
  6721.               int        col - col in window where data input begins
  6722.               (char *) prmpt - field prompt (call with NSTR for none)
  6723.               unsigned atrib - field (not prompt) attributes 
  6724.               char      fill - field fill character
  6725.               (int *)  value - pointer to int for return value (low-high)
  6726.               int     fwidth - width of mask 
  6727.                                (maximum # of digits is 6 with sign)
  6728.               int        low - minimum value (lower limit of value)
  6729.               int       high - maximum value (upper limit of value)
  6730.               (char *) ubuff - pointer to char array of 10 bytes 
  6731.               (char *)hlpmsg - pointer to help message 
  6732.                                (call with NSTR for none)
  6733.               (char *)errmsg - pointer to err message 
  6734.                                (call with NSTR for none)
  6735.           
  6736.         RETURNS:
  6737.           
  6738.               value via pointer.
  6739.           
  6740.               NULL if error, else the non zero value returned from 
  6741.               wn_input.
  6742.           
  6743.               "wns_escape" is set to TRUE if the ESCape key caused 
  6744.               wn_input to terminate.  Set to FALSE otherwise.
  6745.  
  6746.         CAUTIONS and ADDITIONAL NOTES:
  6747.           
  6748.             fun -  fun can only be SET for form setup, or XEQ for 
  6749.                    immediate execution.  When called with SET, valid 
  6750.                    arguments for both "frm" and "fld" must be specified.  
  6751.                    frm is the field pointer returned from wn_frmopn(), and 
  6752.                    fld is the field sequence number in the form for this 
  6753.                    field.  When called with XEQ frm must be NFRM and fld 
  6754.                    must be NFLD.
  6755.           
  6756.  
  6757.  
  6758.  
  6759.  
  6760.  
  6761.  
  6762.  
  6763.  
  6764.  
  6765.                                                            Page: 110
  6766.                                                      The Window BOSS
  6767.  
  6768.  
  6769.  
  6770.         wn_gint - continued.  
  6771.  
  6772.  
  6773.  
  6774.             ubuff - Editing buffer.  Must be of sufficient size to hold 
  6775.                     the data as it is entered.  Minimum size is 10 bytes.
  6776.           
  6777.                     On entry, the first byte of ubuff should be a null, 
  6778.                     otherwise wn_input assumes there is valid data there 
  6779.                     and will enter edit mode.  This can be handy if there 
  6780.                     is a need for prefilled, but editable fields.  In 
  6781.                     actual practice, wn_input uses this buffer for both 
  6782.                     initial character data entry and subsequent editing.
  6783.  
  6784.                     On return, ubuff contains the actual data entered in 
  6785.                     character format with fill and mask characters as 
  6786.                     spaces.
  6787.           
  6788.             Calls wn_input to perform data entry.
  6789.           
  6790.             Data must satisfy validation checks for function to return.
  6791.           
  6792.             Calls wn_iemsg(errmsg) when validation fails.
  6793.  
  6794.             Refer to "SAMPLE.C" for example(s) of usage.
  6795.  
  6796.  
  6797.  
  6798.  
  6799.  
  6800.  
  6801.  
  6802.  
  6803.  
  6804.  
  6805.  
  6806.  
  6807.  
  6808.  
  6809.  
  6810.  
  6811.  
  6812.  
  6813.  
  6814.  
  6815.  
  6816.  
  6817.  
  6818.  
  6819.  
  6820.  
  6821.  
  6822.  
  6823.  
  6824.  
  6825.  
  6826.                                                            Page: 111
  6827.                                                      The Window BOSS
  6828.  
  6829.  
  6830.  
  6831.         10.53. wn_guint - input unsigned integer in window
  6832.  
  6833.         USAGE
  6834.  
  6835.            wn_guint(fun,frm,fld,wn,row,col,prmpt,atrib,fill,v,
  6836.                     fwidth,low,high,ubuff,hlpmsg,errmsg)
  6837.           
  6838.               int        fun - function code (SET || XEQ)
  6839.               (WIFORM)   frm - form pointer  (actual || NFRM)
  6840.               int        fld - field # in form (actual || NFLD)
  6841.               (WINDOWPTR)wn  - window pointer
  6842.               int        row - row in window where data input begins
  6843.               int        col - col in window where data input begins
  6844.               (char *) prmpt - field prompt (call with NSTR for none)
  6845.               unsigned atrib - field (not prompt) attributes 
  6846.               char      fill - field fill character
  6847.               (unsigned *) v - pointer to int for return value (low-high)
  6848.               int     fwidth - width of mask 
  6849.                                (maximum # of digits is 6 with sign)
  6850.               unsigned   low - minimum value (lower limit of value)
  6851.               unsigned  high - maximum value (upper limit of value)
  6852.               (char *) ubuff - pointer to char array of 10 bytes 
  6853.               (char *)hlpmsg - pointer to help message 
  6854.                                (call with NSTR for none)
  6855.               (char *)errmsg - pointer to err message 
  6856.                                (call with NSTR for none)
  6857.           
  6858.         RETURNS:
  6859.           
  6860.               v via pointer.
  6861.           
  6862.               NULL if error, else the non zero value returned from 
  6863.               wn_input.
  6864.           
  6865.               "wns_escape" is set to TRUE if the ESCape key caused 
  6866.               wn_input to terminate.  Set to FALSE otherwise.
  6867.  
  6868.         CAUTIONS and ADDITIONAL NOTES:
  6869.           
  6870.             fun -  fun can only be SET for form setup, or XEQ for 
  6871.                    immediate execution.  When called with SET, valid 
  6872.                    arguments for both "frm" and "fld" must be specified.  
  6873.                    frm is the field pointer returned from wn_frmopn(), and 
  6874.                    fld is the field sequence number in the form for this 
  6875.                    field.  When called with XEQ frm must be NFRM and fld 
  6876.                    must be NFLD.
  6877.           
  6878.  
  6879.  
  6880.  
  6881.  
  6882.  
  6883.  
  6884.  
  6885.  
  6886.  
  6887.                                                            Page: 112
  6888.                                                      The Window BOSS
  6889.  
  6890.  
  6891.  
  6892.         wn_guint - continued.
  6893.  
  6894.  
  6895.  
  6896.             ubuff - Editing buffer.  Must be of sufficient size to hold 
  6897.                    the data as it is entered.  Minimum size is 10 bytes.
  6898.  
  6899.                    On entry, the first byte of ubuff should be a null, 
  6900.                    otherwise wn_input assumes there is valid data there 
  6901.                    and will enter edit mode.  This can be handy if there 
  6902.                    is a need for prefilled, but editable fields.  In 
  6903.                    actual practice, wn_input uses this buffer for both 
  6904.                    initial character data entry and subsequent editing.
  6905.  
  6906.                    On return, ubuff contains the actual data entered in 
  6907.                    character format with fill and mask characters as 
  6908.                    spaces (e.g. "-24000").
  6909.           
  6910.             Calls wn_input to perform data entry.
  6911.           
  6912.             Data must satisfy validation checks for function to return.
  6913.           
  6914.             Calls wn_iemsg(errmsg) when validation fails.
  6915.  
  6916.             Refer to "SAMPLE.C" for example(s) of usage.
  6917.  
  6918.  
  6919.  
  6920.  
  6921.  
  6922.  
  6923.  
  6924.  
  6925.  
  6926.  
  6927.  
  6928.  
  6929.  
  6930.  
  6931.  
  6932.  
  6933.  
  6934.  
  6935.  
  6936.  
  6937.  
  6938.  
  6939.  
  6940.  
  6941.  
  6942.  
  6943.  
  6944.  
  6945.  
  6946.  
  6947.  
  6948.                                                            Page: 113
  6949.                                                      The Window BOSS
  6950.  
  6951.  
  6952.  
  6953.         10.54. wn_glong -- input long integer in window
  6954.  
  6955.         USAGE
  6956.  
  6957.            wn_glong(fun,frm,fld,wn,row,col,prmpt,atrib,fill,value,
  6958.                     fwidth,low,high,ubuff,hlpmsg,errmsg)
  6959.           
  6960.               int        fun - function code (SET || XEQ)
  6961.               (WIFORM)   frm - form pointer  (actual || NFRM)
  6962.               int        fld - field # in form (actual || NFLD)
  6963.               (WINDOWPTR) wn - window pointer
  6964.               int        row - row in window where data input begins
  6965.               int        col - col in window where data input begins
  6966.               (char *) prmpt - field prompt (call with NSTR for none)
  6967.               unsigned atrib - field (not prompt) attributes 
  6968.               char      fill - field fill character
  6969.               (long*)  value - pointer to long for return value (low-high)
  6970.               int     fwidth - width of mask 
  6971.                                (maximum # of digits is 10 with sign)
  6972.               long       low - minimum value (lower limit of value)
  6973.               long      high - maximum value (upper limit of value)
  6974.               (char *) ubuff - pointer to char array of fwidth+2 bytes 
  6975.               (char *)hlpmsg - pointer to help message 
  6976.                                (call with NSTR for none)
  6977.               (char *)errmsg - pointer to err message 
  6978.                                (call with NSTR for none)
  6979.           
  6980.         RETURNS:
  6981.           
  6982.               v via pointer.
  6983.           
  6984.               NULL if error, else the non zero value returned from 
  6985.               wn_input.
  6986.           
  6987.               "wns_escape" is set to TRUE if the ESCape key caused 
  6988.               wn_input to terminate.  Set to FALSE otherwise.
  6989.  
  6990.         CAUTIONS and ADDITIONAL NOTES:
  6991.           
  6992.             fun -  fun can only be SET for form setup, or XEQ for 
  6993.                    immediate execution.  When called with SET, valid 
  6994.                    arguments for both "frm" and "fld" must be specified.  
  6995.                    frm is the field pointer returned from wn_frmopn(), and 
  6996.                    fld is the field sequence number in the form for this 
  6997.                    field.  When called with XEQ frm must be NFRM and fld 
  6998.                    must be NFLD.
  6999.           
  7000.  
  7001.  
  7002.  
  7003.  
  7004.  
  7005.  
  7006.  
  7007.  
  7008.  
  7009.                                                            Page: 114
  7010.                                                      The Window BOSS
  7011.  
  7012.  
  7013.  
  7014.         wn_glong - continued.  
  7015.  
  7016.  
  7017.  
  7018.             ubuff - Editing buffer.  Must be of sufficient size to hold 
  7019.                    the data as it is entered.  Minimum size is fwidth+2.
  7020.           
  7021.                    On entry, the first byte of ubuff should be a null, 
  7022.                    otherwise wn_input assumes there is valid data there 
  7023.                    and will enter edit mode.  This can be handy if there 
  7024.                    is a need for prefilled, but editable fields.  In 
  7025.                    actual practice, wn_input uses this buffer for both 
  7026.                    initial character data entry and subsequent editing.
  7027.  
  7028.                    On return, ubuff contains the actual data entered in 
  7029.                    character format with fill and mask characters as 
  7030.                    spaces (e.g. "-24000").
  7031.           
  7032.             Calls wn_input to perform data entry.
  7033.           
  7034.             Data must satisfy validation checks for function to return.
  7035.           
  7036.             Calls wn_iemsg(errmsg) when validation fails.
  7037.  
  7038.             Refer to "SAMPLE.C" for example(s) of usage.
  7039.  
  7040.  
  7041.  
  7042.  
  7043.  
  7044.  
  7045.  
  7046.  
  7047.  
  7048.  
  7049.  
  7050.  
  7051.  
  7052.  
  7053.  
  7054.  
  7055.  
  7056.  
  7057.  
  7058.  
  7059.  
  7060.  
  7061.  
  7062.  
  7063.  
  7064.  
  7065.  
  7066.  
  7067.  
  7068.  
  7069.  
  7070.                                                            Page: 115
  7071.                                                      The Window BOSS
  7072.  
  7073.  
  7074.  
  7075.         10.55. wn_gulong -- input unsigned long integer in window
  7076.  
  7077.         USAGE
  7078.  
  7079.            wn_gulong(fun,frm,fld,wn,row,col,prmpt,atrib,fill,value,
  7080.                     fwidth,low,high,ubuff,hlpmsg,errmsg)
  7081.           
  7082.               int        fun - function code (SET || XEQ)
  7083.               (WIFORM)   frm - form pointer  (actual || NFRM)
  7084.               int        fld - field # in form (actual || NFLD)
  7085.               (WINDOWPTR) wn - window pointer
  7086.               int        row - row in window where data input begins
  7087.               int        col - col in window where data input begins
  7088.               (char *) prmpt - field prompt (call with NSTR for none)
  7089.               unsigned atrib - field (not prompt) attributes 
  7090.               char      fill - field fill character
  7091.               (unsigned long*) value - 
  7092.                                pointer to long for return value (low-high)
  7093.               int     fwidth - width of mask 
  7094.                                (maximum # of digits is 10 with sign)
  7095.               unsigned long low -
  7096.                                minimum value (lower limit of value)
  7097.               unsigned long high -
  7098.                                maximum value (upper limit of value)
  7099.               (char *) ubuff - pointer to char array of fwidth+2 bytes 
  7100.               (char *)hlpmsg - pointer to help message 
  7101.                                (call with NSTR for none)
  7102.               (char *)errmsg - pointer to err message 
  7103.                                (call with NSTR for none)
  7104.           
  7105.         RETURNS:
  7106.           
  7107.               v via pointer.
  7108.           
  7109.               NULL if error, else the non zero value returned from 
  7110.               wn_input.
  7111.           
  7112.               "wns_escape" is set to TRUE if the ESCape key caused 
  7113.               wn_input to terminate.  Set to FALSE otherwise.
  7114.  
  7115.         CAUTIONS and ADDITIONAL NOTES:
  7116.           
  7117.             fun -  fun can only be SET for form setup, or XEQ for 
  7118.                    immediate execution.  When called with SET, valid 
  7119.                    arguments for both "frm" and "fld" must be specified.  
  7120.                    frm is the field pointer returned from wn_frmopn(), and 
  7121.                    fld is the field sequence number in the form for this 
  7122.                    field.  When called with XEQ frm must be NFRM and fld 
  7123.                    must be NFLD.
  7124.  
  7125.  
  7126.  
  7127.  
  7128.  
  7129.  
  7130.  
  7131.                                                            Page: 116
  7132.                                                      The Window BOSS
  7133.  
  7134.  
  7135.  
  7136.         wn_gulong - continued.  
  7137.  
  7138.  
  7139.  
  7140.             ubuff - Editing buffer.  Must be of sufficient size to hold 
  7141.                    the data as it is entered.  Minimun size is fwidth+2.
  7142.           
  7143.                    On entry, the first byte of ubuff should be a null, 
  7144.                    otherwise wn_input assumes there is valid data there 
  7145.                    and will enter edit mode.  This can be handy if there 
  7146.                    is a need for prefilled, but editable fields.  In 
  7147.                    actual practice, wn_input uses this buffer for both 
  7148.                    initial character data entry and subsequent editing.
  7149.                    On return, ubuff contains the actual data entered in 
  7150.                    character format with fill and mask characters as 
  7151.                    spaces (e.g. "-24000").
  7152.           
  7153.             Calls wn_input to perform data entry.
  7154.           
  7155.             Data must satisfy validation checks for function to return.
  7156.           
  7157.             Calls wn_iemsg(errmsg) when validation fails.
  7158.  
  7159.  
  7160.  
  7161.  
  7162.  
  7163.  
  7164.  
  7165.  
  7166.  
  7167.  
  7168.  
  7169.  
  7170.  
  7171.  
  7172.  
  7173.  
  7174.  
  7175.  
  7176.  
  7177.  
  7178.  
  7179.  
  7180.  
  7181.  
  7182.  
  7183.  
  7184.  
  7185.  
  7186.  
  7187.  
  7188.  
  7189.  
  7190.  
  7191.  
  7192.                                                            Page: 117
  7193.                                                      The Window BOSS
  7194.  
  7195.  
  7196.  
  7197.         10.56. wn_gfloat -- input float in window
  7198.  
  7199.         USAGE
  7200.  
  7201.            wn_gfloat(fun,frm,fld,wn,row,col,prmpt,atrib,fill,v,
  7202.                      fwidth,ndec,low,high,ubuff,hlpmsg,errmsg)
  7203.           
  7204.               int        fun - function code (SET || XEQ)
  7205.               (WIFORM)   frm - form pointer  (actual || NFRM)
  7206.               int        fld - field # in form (actual || NFLD)
  7207.               (WINDOWPTR) wn - window pointer
  7208.               int        row - row in window where data input begins
  7209.               int        col - col in window where data input begins
  7210.               (char *) prmpt - field prompt (call with NSTR for none)
  7211.               unsigned atrib - field (not prompt) attributes 
  7212.               char      fill - field fill character
  7213.               (float  *)   v - pointer to float for return value
  7214.               int     fwidth - width of mask 
  7215.                                (maximum # of digits is 20 with sign)
  7216.               int       ndec - # of decimal places 
  7217.               float      low - minimum value (lower limit of value)
  7218.               float     high - maximum value (upper limit of value)
  7219.               (char *) ubuff - pointer to char array of fwidth+2 bytes 
  7220.               (char *)hlpmsg - pointer to help message 
  7221.                                (call with NSTR for none)
  7222.               (char *)errmsg - pointer to err message 
  7223.                                (call with NSTR for none)
  7224.           
  7225.         RETURNS:
  7226.           
  7227.               v via pointer.
  7228.           
  7229.               NULL if error, else the non zero value returned from 
  7230.               wn_input.
  7231.           
  7232.               "wns_escape" is set to TRUE if the ESCape key caused 
  7233.               wn_input to terminate.  Set to FALSE otherwise.
  7234.  
  7235.         CAUTIONS and ADDITIONAL NOTES:
  7236.           
  7237.             fun -  fun can only be SET for form setup, or XEQ for 
  7238.                    immediate execution.  When called with SET, valid 
  7239.                    arguments for both "frm" and "fld" must be specified.  
  7240.                    frm is the field pointer returned from wn_frmopn(), and 
  7241.                    fld is the field sequence number in the form for this 
  7242.                    field.  When called with XEQ frm must be NFRM and fld 
  7243.                    must be NFLD.
  7244.           
  7245.             ubuff - Editing buffer.  Must be of sufficient size to hold 
  7246.                    the data as it is entered.  Minimum size is fwidth+2. 
  7247.           
  7248.  
  7249.  
  7250.  
  7251.  
  7252.  
  7253.                                                            Page: 118
  7254.                                                      The Window BOSS
  7255.  
  7256.  
  7257.  
  7258.         wn_gfloat - continued.
  7259.  
  7260.  
  7261.                     
  7262.                    On entry, the first byte of ubuff should be a null, 
  7263.                    otherwise wn_input assumes there is valid data there 
  7264.                    and will enter edit mode.  This can be handy if there 
  7265.                    is a need for prefilled, but editable fields.  In 
  7266.                    actual practice, wn_input uses this buffer for both 
  7267.                    initial character data entry and subsequent editing.
  7268.  
  7269.                    On return, ubuff contains the actual data entered in 
  7270.                    character format with fill and mask characters as 
  7271.                    spaces (e.g. "   -1240.20").
  7272.           
  7273.             Calls wn_input to perform data entry.
  7274.           
  7275.             Data must satisfy validation checks for function to return.
  7276.           
  7277.             Calls wn_iemsg(errmsg) when validation fails.
  7278.  
  7279.             Refer to "SAMPLE.C" for example(s) of usage.
  7280.  
  7281.             WN_GFLOAT.C is provided in source form.
  7282.  
  7283.  
  7284.  
  7285.  
  7286.  
  7287.  
  7288.  
  7289.  
  7290.  
  7291.  
  7292.  
  7293.  
  7294.  
  7295.  
  7296.  
  7297.  
  7298.  
  7299.  
  7300.  
  7301.  
  7302.  
  7303.  
  7304.  
  7305.  
  7306.  
  7307.  
  7308.  
  7309.  
  7310.  
  7311.  
  7312.  
  7313.  
  7314.                                                            Page: 119
  7315.                                                      The Window BOSS
  7316.  
  7317.  
  7318.  
  7319.         10.57. wn_gdouble -- input double in window
  7320.  
  7321.         USAGE
  7322.  
  7323.            wn_gdouble(fun,frm,fld,wn,row,col,prmpt,atrib,fill,v,
  7324.                      fwidth,ndec,low,high,ubuff,hlpmsg,errmsg)
  7325.           
  7326.               int        fun - function code (SET || XEQ)
  7327.               (WIFORM)   frm - form pointer  (actual || NFRM)
  7328.               int        fld - field # in form (actual || NFLD)
  7329.               (WINDOWPTR) wn - window pointer
  7330.               int        row - row in window where data input begins
  7331.               int        col - col in window where data input begins
  7332.               (char *) prmpt - field prompt (call with NSTR for none)
  7333.               unsigned atrib - field (not prompt) attributes 
  7334.               char      fill - field fill character
  7335.               (double *)   v - pointer to float for return value
  7336.               int     fwidth - width of mask 
  7337.                                (maximum # of digits is 20 with sign)
  7338.               int       ndec - # of decimal places 
  7339.               double     low - minimum value (lower limit of value)
  7340.               double    high - maximum value (upper limit of value)
  7341.               (char *) ubuff - pointer to char array of fwidth+2 bytes 
  7342.               (char *)hlpmsg - pointer to help message 
  7343.                                (call with NSTR for none)
  7344.               (char *)errmsg - pointer to err message 
  7345.                                (call with NSTR for none)
  7346.           
  7347.         RETURNS:
  7348.           
  7349.               v via pointer.
  7350.           
  7351.               NULL if error, else the non zero value returned from 
  7352.               wn_input.
  7353.           
  7354.               "wns_escape" is set to TRUE if the ESCape key caused  
  7355.               wn_input to terminate.  Set to FALSE otherwise.
  7356.  
  7357.         CAUTIONS AND ADDITIONAL NOTES:
  7358.                       
  7359.               fun - fun can only be SET for form setup, or XEQ for 
  7360.                    immediate execution.  When called with SET, valid 
  7361.                    arguments for both "frm" and "fld" must be specified.  
  7362.                    frm is the field pointer returned from wn_frmopn(), 
  7363.                    and fld is the field sequence number in the form for 
  7364.                    this field.  When called with XEQ frm must be NFRM and 
  7365.                    fld must be NFLD.
  7366.                       
  7367.               ubuff - Editing buffer.  Must be of sufficient size to hold 
  7368.                    the data as it is entered.  Minimum size is fwidth+2. 
  7369.                       
  7370.  
  7371.  
  7372.  
  7373.  
  7374.  
  7375.                                                            Page: 120
  7376.                                                      The Window BOSS
  7377.  
  7378.  
  7379.  
  7380.                     wn_gdouble - continued.
  7381.  
  7382.  
  7383.                       
  7384.                    On entry, the first byte of ubuff should be a null, 
  7385.                    otherwise wn_input assumes there is valid data there 
  7386.                    and will enter edit mode.  This can be handy if there 
  7387.                    is a need for prefilled, but editable fields.  In 
  7388.                    actual practice, wn_input uses this buffer for both 
  7389.                    initial character data entry and subsequent editing.
  7390.  
  7391.                    On return, ubuff contains the actual data entered in 
  7392.                    character format with fill and mask characters as 
  7393.                    spaces (e.g. "   -1240.20").
  7394.                       
  7395.                         Calls wn_input to perform data entry.
  7396.                       
  7397.                    Data must satisfy validation checks for function to 
  7398.                    return.
  7399.                       
  7400.                    Calls wn_iemsg(errmsg) when validation fails.
  7401.  
  7402.  
  7403.  
  7404.  
  7405.  
  7406.  
  7407.  
  7408.  
  7409.  
  7410.  
  7411.  
  7412.  
  7413.  
  7414.  
  7415.  
  7416.  
  7417.  
  7418.  
  7419.  
  7420.  
  7421.  
  7422.  
  7423.  
  7424.  
  7425.  
  7426.  
  7427.  
  7428.  
  7429.  
  7430.  
  7431.  
  7432.  
  7433.  
  7434.  
  7435.  
  7436.                                                            Page: 121
  7437.                                                      The Window BOSS
  7438.  
  7439.  
  7440.  
  7441.         10.58. wn_gbool -- input logical in window
  7442.  
  7443.         USAGE
  7444.  
  7445.           wn_gbool(fun,frm,fld,wn,row,col,prmpt,atrib,fill,value,
  7446.                    ubuff,hlpmsg,errmsg)
  7447.                       
  7448.               int        fun - function code (SET || XEQ)
  7449.               (WIFORM)   frm - form pointer  (actual || NFRM)
  7450.               int        fld - field # in form (actual || NFLD)
  7451.               (WINDOWPTR) wn - window pointer
  7452.               int        row - row in window where data input begins
  7453.               int        col - col in window where data input begins
  7454.               (char *) prmpt - field prompt (call with NSTR for none)
  7455.               unsigned atrib - field (not prompt) attributes 
  7456.               char      fill - field fill character
  7457.               (int *)  value - pointer to int for value (0=FALSE, 1=TRUE)
  7458.               (char *) ubuff - pointer to char array of 3 bytes 
  7459.               (char *)hlpmsg - pointer to help message 
  7460.                                (call with NSTR for none)
  7461.               (char *)errmsg - pointer to err message 
  7462.                                (call with NSTR for none)
  7463.           
  7464.         RETURNS:
  7465.           
  7466.               value via pointer (0=FALSE, 1=TRUE)
  7467.           
  7468.               NULL if error, else the non zero value returned from 
  7469.               wn_input.
  7470.           
  7471.               "wns_escape" is set to TRUE if the ESCape key caused 
  7472.               wn_input to terminate.  Set to FALSE otherwise.
  7473.  
  7474.         CAUTIONS and ADDITIONAL NOTES:
  7475.           
  7476.             fun -  fun can only be SET for form setup, or XEQ for 
  7477.                    immediate execution.  When called with SET, valid 
  7478.                    arguments for both "frm" and "fld" must be specified.  
  7479.                    frm is the field pointer returned from wn_frmopn(), and 
  7480.                    fld is the field sequence number in the form for this 
  7481.                    field.  When called with XEQ frm must be NFRM and fld 
  7482.                    must be NFLD.
  7483.           
  7484.             ubuff - Editing buffer.  Must be of sufficient size to hold 
  7485.                    the data as it is entered.  Minimum size is 3 bytes.f
  7486.           
  7487.                    On entry, the first byte of ubuff should be a null, 
  7488.                    otherwise wn_input assumes there is valid data there 
  7489.                    and will enter edit mode.  This can be handy if there 
  7490.                    is a need for prefilled, but editable fields.  In 
  7491.                    actual practice, wn_input uses this buffer for both 
  7492.                    initial character data entry and subsequent editing.
  7493.  
  7494.  
  7495.  
  7496.  
  7497.                                                            Page: 122
  7498.                                                      The Window BOSS
  7499.  
  7500.  
  7501.  
  7502.         wn_gbool - continued.
  7503.  
  7504.  
  7505.  
  7506.                    On return, ubuff contains the actual data entered in 
  7507.                    character format with fill and mask characters as 
  7508.                    spaces (e.g. "T").
  7509.           
  7510.             Calls wn_input to perform data entry.
  7511.           
  7512.             User MUST enter T,F,Y, or N.
  7513.           
  7514.             Data must satisfy validation checks for function to return.
  7515.           
  7516.             Calls wn_iemsg(errmsg) when validation fails.
  7517.           
  7518.             Refer to "SAMPLE.C" for example(s) of usage.
  7519.  
  7520.  
  7521.  
  7522.  
  7523.  
  7524.  
  7525.  
  7526.  
  7527.  
  7528.  
  7529.  
  7530.  
  7531.  
  7532.  
  7533.  
  7534.  
  7535.  
  7536.  
  7537.  
  7538.  
  7539.  
  7540.  
  7541.  
  7542.  
  7543.  
  7544.  
  7545.  
  7546.  
  7547.  
  7548.  
  7549.  
  7550.  
  7551.  
  7552.  
  7553.  
  7554.  
  7555.  
  7556.  
  7557.  
  7558.                                                            Page: 123
  7559.                                                      The Window BOSS
  7560.  
  7561.  
  7562.  
  7563.         10.59. wn_dtext -- display text on input form
  7564.  
  7565.         USAGE
  7566.  
  7567.            wn_dtext(fun,frm,fld,wn,row,col,prmpt)
  7568.           
  7569.               int        fun - function code (SET || XEQ)
  7570.               (WIFORM)   frm - form pointer  (actual || NFRM)
  7571.               int        fld - field # in form (actual || NFLD)
  7572.               (WINDOWPTR) wn - window pointer
  7573.               int        row - row in window where data input begins
  7574.               int        col - col in window where data input begins
  7575.               (char *) prmpt - field prompt (call with NSTR for none)
  7576.           
  7577.         RETURNS:
  7578.           
  7579.               TRUE if fun==SET 
  7580.           
  7581.                or
  7582.           
  7583.               Normal return value of wn_puts if fun==XEQ
  7584.           
  7585.         CAUTIONS and ADDITIONAL NOTES:
  7586.           
  7587.             fun -  fun can only be SET for form setup, or XEQ for 
  7588.                    immediate execution.  When called with SET, valid 
  7589.                    arguments for both "frm" and "fld" must be specified.  
  7590.                    frm is the field pointer returned from wn_frmopn(), and 
  7591.                    fld is the field sequence number in the form for this 
  7592.                    field.  When called with XEQ frm must be NFRM and fld 
  7593.                    must be NFLD.
  7594.  
  7595.             Refer to "SAMPLE.C" for example(s) of usage.
  7596.  
  7597.  
  7598.  
  7599.  
  7600.  
  7601.  
  7602.  
  7603.  
  7604.  
  7605.  
  7606.  
  7607.  
  7608.  
  7609.  
  7610.  
  7611.  
  7612.  
  7613.  
  7614.  
  7615.  
  7616.  
  7617.  
  7618.  
  7619.                                                            Page: 124
  7620.                                                      The Window BOSS
  7621.  
  7622.  
  7623.  
  7624.         10.60. wn_iemsg -- display input error message
  7625.  
  7626.         USAGE
  7627.  
  7628.            wn_iemsg(msg)
  7629.           
  7630.               (char *)   msg - pointer to message to be displayed.
  7631.           
  7632.         RETURNS:
  7633.           
  7634.               NULL if error, else TRUE
  7635.           
  7636.         CAUTIONS and ADDITIONAL NOTES:
  7637.           
  7638.             This routine should be modified or replaced with code to suit 
  7639.             your application's specific needs.  It hooks to wn_g???? 
  7640.             such that whenever the field validation fails wn_g???? calls 
  7641.             wn_iemsg to display an error message for the field in 
  7642.             question.  The hooks in wn_g????? are of the form:
  7643.           
  7644.                 if(validation failed) wn_iemsg(msg);
  7645.           
  7646.             This routine displays a single line of text on the 25th line 
  7647.             and waits for a key to be struck before returning to accept 
  7648.             new data for the field in question.
  7649.           
  7650.             The error message can be a maximum of 80 characters, and must 
  7651.             not contain any formatting directives (\n\t...).
  7652.           
  7653.             Some wn_g???? functions (i.e. wn_gtext) have no provision to 
  7654.             validate data and therefore never attempt to call this 
  7655.             routine.
  7656.  
  7657.             WN_IEMSG.C is provided in source form.
  7658.  
  7659.  
  7660.  
  7661.  
  7662.  
  7663.  
  7664.  
  7665.  
  7666.  
  7667.  
  7668.  
  7669.  
  7670.  
  7671.  
  7672.  
  7673.  
  7674.  
  7675.  
  7676.  
  7677.  
  7678.  
  7679.  
  7680.                                                            Page: 125
  7681.                                                      The Window BOSS
  7682.  
  7683.  
  7684.  
  7685.         10.61. wn_ihmsg -- display input help message
  7686.           
  7687.         USAGE
  7688.           
  7689.            wn_ihmsg(msg)
  7690.           
  7691.               (char *)   msg - pointer to message to be displayed.
  7692.           
  7693.         RETURNS:
  7694.           
  7695.             NULL if error, else TRUE
  7696.           
  7697.         CAUTIONS and ADDITIONAL NOTES:
  7698.           
  7699.             This routine should be modified or replaced with code to suit 
  7700.             your application's specific needs.  It hooks to wn_input 
  7701.             such that whenever the HELP key is pressed wn_input calls 
  7702.             wn_ihmsg to display a help message for the field in question.  
  7703.             The hooks in wn_input are of the form:
  7704.           
  7705.                 if(key_struck == HELP) wn_ihmsg(msg);
  7706.           
  7707.             The F1 key is the default HELP key.  This can be changed by 
  7708.             calling the wns_shkey() function.
  7709.  
  7710.             This routine displays a single line of help on the 25th line 
  7711.             and waits for a key to be struck before returning.
  7712.           
  7713.             The help message can be a maximum of 80 characters, and must 
  7714.             not contain any formatting directives (\n\t...).
  7715.  
  7716.             WN_IHMSG is provided in source form.
  7717.  
  7718.  
  7719.         10.62. wn_shkey -- set HELP key code
  7720.  
  7721.         USAGE
  7722.  
  7723.             wn_shkey(code)
  7724.             unsigned int code;
  7725.  
  7726.               code - scancode of the key to be defined as the HELP key.
  7727.  
  7728.             F1 is the default HELP key.  The scancode for F1 is 0x3B00.              
  7729.  
  7730.         RETURNS
  7731.  
  7732.              Nothing.
  7733.  
  7734.         CAUTIONS and ADDITIONAL NOTES:
  7735.  
  7736.              SCANCODE.C can be used to determine the scancodes for any 
  7737.              and all keys.
  7738.  
  7739.  
  7740.  
  7741.                                                            Page: 126
  7742.                                                      The Window BOSS
  7743.  
  7744.  
  7745.  
  7746.         10.63. wn_popup -- display and act on popup menu
  7747.  
  7748.         USAGE
  7749.  
  7750.           wn_popup(page,row,col,width,height,atrib,batrib,mx,cflag)
  7751.           int page, row, col, width, height, cflag;
  7752.           unsigned int atrib, batrib;
  7753.           struct pmenu *mx;
  7754.  
  7755.              page -    video page (Always 0)
  7756.              row  -    row of origin 
  7757.              col  -    col of origin 
  7758.              width -   width (inside dimension)
  7759.              height -  height (inside dimension)
  7760.              atrib -   window attribute
  7761.              batrib -  border attribute
  7762.              mx -      pointer to menu structure
  7763.              cflag -   close on return flag (FALSE to leave open)
  7764.  
  7765.           The pmenu structure is defined in "winboss.h" (replicated here 
  7766.           for clarity) and must be initialized prior to calling wn_popup.
  7767.  
  7768.           struct mitem {              /* POPUP menu item template */
  7769.             int r;                    /* row */
  7770.             int c;                    /* col */
  7771.             char *t;                  /* text */
  7772.             int rv;                   /* return value */
  7773.           };
  7774.  
  7775.           struct pmenu {              /* POPUP menu structure */
  7776.             WINDOWPTR wpsave;         /* place to hold window id */
  7777.             int winopn;               /* leave window open flag */
  7778.             int lndx;                 /* last index */
  7779.             int fm;                   /* first menu item index */
  7780.             int lm;                   /* last menu item index */
  7781.             struct mitem scrn[WN_MXROWS*4]; /* a bunch of menu items */
  7782.           };                          /* NOTE RELATIVE LIMIT */
  7783.  
  7784.         RETURNS:
  7785.  
  7786.           The return code for the menu item selected or 99 if ESCape is 
  7787.           pressed.
  7788.  
  7789.         CAUTIONS and ADDITIONAL NOTES:
  7790.  
  7791.           None.
  7792.  
  7793.         SEE ALSO
  7794.  
  7795.           Popup menu basics.
  7796.  
  7797.  
  7798.  
  7799.  
  7800.  
  7801.  
  7802.                                                            Page: 127
  7803.                                                      The Window BOSS
  7804.  
  7805.  
  7806.  
  7807.         10.64. wn_qpopup -- display quick popup window
  7808.  
  7809.         USAGE
  7810.  
  7811.           WINDOPTR wn_qpopup(page,row,col,width,height,atrib,batrib,mx)
  7812.           int page, row, col, width, height, cflag;
  7813.           unsigned int atrib, batrib;
  7814.           struct pmenu *mx;
  7815.  
  7816.              page -    video page (Always 0)
  7817.              row  -    row of origin (0 to WN_MAXROWS)
  7818.              col  -    col of origin (0 to WN_MAXCOLS)
  7819.              width -   width (inside dimension)
  7820.              height -  height (inside dimension)
  7821.              atrib -   window attribute
  7822.              batrib -  border attribute
  7823.              mx -      pointer to menu structure
  7824.  
  7825.           The pmenu structure is defined in "winboss.h" (replicated here 
  7826.           for clarity) and must be initialized prior to calling wn_popup.
  7827.  
  7828.           struct mitem {              /* POPUP menu item template */
  7829.             int r;                    /* row */
  7830.             int c;                    /* col */
  7831.             char *t;                  /* text */
  7832.             int rv;                   /* return value */
  7833.           };
  7834.  
  7835.           struct pmenu {              /* POPUP menu structure */
  7836.             WINDOWPTR wpsave;         /* place to hold window id */
  7837.             int winopn;               /* leave window open flag */
  7838.             int lndx;                 /* last index */
  7839.             int fm;                   /* first menu item index */
  7840.             int lm;                   /* last menu item index */
  7841.             struct mitem scrn[WN_MXROWS*4]; /* a bunch of menu items */
  7842.           };                          /* NOTE RELATIVE LIMIT */
  7843.  
  7844.         RETURNS:
  7845.  
  7846.           A WINDOWPTR to the popup window that has been displayed.
  7847.  
  7848.         CAUTIONS and ADDITIONAL NOTES:
  7849.  
  7850.           None.
  7851.  
  7852.         SEE ALSO
  7853.  
  7854.           Popup menu basics.
  7855.  
  7856.  
  7857.  
  7858.  
  7859.  
  7860.  
  7861.  
  7862.  
  7863.                                                            Page: 128
  7864.                                                      The Window BOSS
  7865.  
  7866.  
  7867.  
  7868.         10.65. wh_hlinit -- initialize help system
  7869.  
  7870.         USAGE
  7871.  
  7872.           wn_hlinit(row, col, width, height, atrib, batrib, file)
  7873.           int page, row, col, width, height, atrib, batrib;
  7874.           char *file;
  7875.  
  7876.                 row  -  row of upper left hand corner of the window
  7877.                 col  -  column of upper left hand corner of the window
  7878.                 width - INSIDE dimension (max value is 78 for a 80 column 
  7879.                         wide display)
  7880.                 height- INSIDE dimension (max value is 23 for a 25 row 
  7881.                         high display)
  7882.                 atrib - attribute to be used IN the window
  7883.                 batrib- attribute to be used for the border
  7884.                 file  - help file name (assumes ".HLP" extension)
  7885.           
  7886.           Unless you modify the code in WN_HELP.C, wn_hlint calls should 
  7887.           always take the form of:
  7888.  
  7889.             wn_hlinit(0,0,78,23,(BLUE<<4|WHITE),(BLUE<<4|WHITE),file);
  7890.                       |                                       |  | 
  7891.                       +--------------\/-----------------------+  |
  7892.                                   Use as is                      |
  7893.                                                                  |
  7894.                                     YOUR ".HLP" file's name -----+                                                    
  7895.  
  7896.           Unless you modify the code in WN_HELP.C, "HLP" files should be 
  7897.           formatted according to the following convention:
  7898.  
  7899.              %key_word%  - max 25 characters, ALWAYS begin in position 1,
  7900.                            always enclosed within percent signs.
  7901.  
  7902.              text        - starts in column 3, ends in 76, contains a                  
  7903.                            maximum of 20 lines per screen. Text, 
  7904.                            including any leading and/or trailing blank 
  7905.                            lines and/or spaces is always immediately 
  7906.                            preceded by a key word or the .cp command. 
  7907.                            (Use blank lines at the top to center 
  7908.                            vertically.  Use spaces at the left of each 
  7909.                            line to center horizontally.)
  7910.  
  7911.              .cp         - starts in column 1. Command that signals end 
  7912.                            of screen in a series of 2 or more help 
  7913.                            screens.  Precedes or succeeds text.
  7914.  
  7915.              *END*       - starts in column 1. Command that signals end
  7916.                            of help. Succeeds text.
  7917.  
  7918.  
  7919.  
  7920.  
  7921.  
  7922.  
  7923.  
  7924.                                                            Page: 129
  7925.                                                      The Window BOSS
  7926.  
  7927.  
  7928.  
  7929.         wn_hlinit - continued.
  7930.  
  7931.  
  7932.  
  7933.           A typical HLP file would look something like.
  7934.  
  7935.              00000...............................................77778
  7936.              12345...............................................67890
  7937.  
  7938.              %subject 1%
  7939.                            Title of Screen 1 - Subject 1
  7940.              
  7941.                This is a sample help screen for screen number 1 
  7942.                of a multi screen message.
  7943.              .cp
  7944.                            Title of Screen 2 - Subject 1
  7945.  
  7946.                This the second screen of a multi screen help 
  7947.                message for subject1.
  7948.              *END*
  7949.  
  7950.              %subject 2%
  7951.                            Title of Screen 1 - Subject 2     
  7952.  
  7953.                This is a sample help screen for a single screen 
  7954.                help message.
  7955.              *END*
  7956.  
  7957.           Later, when wn_help is called, text will be sequentially 
  7958.           displayed a screen at a time from the subject keyword through 
  7959.           any number of .cp delimited screens through and including the 
  7960.           screen delimited by *END*.  The system allows for forward and 
  7961.           reverse display via the PgUp and PgDn keys.  The .cp signals 
  7962.           the end of a single screen in a series of 2 or more screens.  
  7963.           When .cp is detected, the message  "Esc to quit help, PgUp for 
  7964.           previous screen, any other key to continue..." will be 
  7965.           displayed.  When *END* is detected, the message "End of help, 
  7966.           PgUp for previous screen, any other key to continue..." is 
  7967.           displayed.  
  7968.  
  7969.         RETURNS:
  7970.  
  7971.           TRUE if all is well.
  7972.  
  7973.           FALSE the help file (.HLP) or its index file (.NDX) could not 
  7974.           be found or open.  A FALSE return can also be caused by a lack 
  7975.           of free memory for the memory resident file index or the file 
  7976.           buffers themselves.
  7977.  
  7978.  
  7979.  
  7980.  
  7981.  
  7982.  
  7983.  
  7984.  
  7985.                                                            Page: 130
  7986.                                                      The Window BOSS
  7987.  
  7988.  
  7989.  
  7990.         wn_hlinit - continued.
  7991.  
  7992.  
  7993.  
  7994.         CAUTIONS and ADDITIONAL NOTES:
  7995.  
  7996.           wn_hlinit requires both the ".HLP" and ".NDX" files to be 
  7997.           present when called. "NDX" files are produced by GENINDEX.  The 
  7998.           source to GENINDEX can be found in GENINDEX.C.  
  7999.  
  8000.           As implemented, the help system is configured to provide a full 
  8001.           screen text message, subject keys are limited to 25 characters, 
  8002.           and there is a limit of 255 subject keys per file.  This can be 
  8003.           changed by modifying the functions found in "wn_help.c"  THERE 
  8004.           IS A DIRECT CORRELATION BETWEEN THE PARAMETERS USED TO 
  8005.           INITIALIZE THE HELP SYSTEM AND THE LAYOUT OF THE ASCII TEXT 
  8006.           FILE READ BY THE GENINDEX PROGRAM.  If you modify the code be 
  8007.           sure to modify the location and text of the messages to be 
  8008.           displayed when .cp and/or *END* are dectected.
  8009.  
  8010.         SEE ALSO
  8011.  
  8012.           Help system basics, wn_help
  8013.  
  8014.  
  8015.  
  8016.  
  8017.  
  8018.  
  8019.  
  8020.  
  8021.  
  8022.  
  8023.  
  8024.  
  8025.  
  8026.  
  8027.  
  8028.  
  8029.  
  8030.  
  8031.  
  8032.  
  8033.  
  8034.  
  8035.  
  8036.  
  8037.  
  8038.  
  8039.  
  8040.  
  8041.  
  8042.  
  8043.  
  8044.  
  8045.  
  8046.                                                            Page: 131
  8047.                                                      The Window BOSS
  8048.  
  8049.  
  8050.  
  8051.         10.66. wn_help -- display help message 
  8052.  
  8053.         USAGE
  8054.  
  8055.           wn_help(key_word)
  8056.           char *key_word;
  8057.  
  8058.              char *key_word - valid keyword contained in help file named 
  8059.                               in the call to wn_hlinit.
  8060.  
  8061.           The text associated with the key_word will be sequentially 
  8062.           displayed a screen at a time from the subject keyword through 
  8063.           any number of .cp delimited screens through and including the 
  8064.           screen delimited by *END*.  The system allows for forward and 
  8065.           reverse display via the PgUp and PgDn keys.  The .cp signals 
  8066.           the end of a single screen in a series of 2 or more screens.  
  8067.           When .cp is detected, the message  "Esc to quit help, PgUp for 
  8068.           previous screen, any other key to continue..." will be 
  8069.           displayed.  When *END* is detected, the message "End of help, 
  8070.           PgUp for previous screen, any other key to continue..." is 
  8071.           displayed.  
  8072.  
  8073.         RETURNS:
  8074.                                
  8075.           TRUE if all is well. 
  8076.  
  8077.           FALSE if system has not been initialzied, the . HLP file can 
  8078.           not be found,  or the keyword passed could not be found in the 
  8079.           memory resident index.
  8080.  
  8081.         CAUTIONS and ADDITIONAL NOTES:
  8082.  
  8083.           None.
  8084.  
  8085.         SEE ALSO
  8086.  
  8087.           wn_hlinit
  8088.  
  8089.  
  8090.  
  8091.  
  8092.  
  8093.  
  8094.  
  8095.  
  8096.  
  8097.  
  8098.  
  8099.  
  8100.  
  8101.  
  8102.  
  8103.  
  8104.  
  8105.  
  8106.  
  8107.                                                            Page: 132
  8108.                                                      The Window BOSS
  8109.  
  8110.  
  8111.  
  8112.         10.67. wn_sleftj -- (string) left justify 
  8113.  
  8114.         USAGE
  8115.  
  8116.              wn_sleftj(str)
  8117.  
  8118.                   (char *) str - string to left justify
  8119.           
  8120.         RETURNS:
  8121.  
  8122.              Pointer to str.
  8123.           
  8124.         CAUTIONS and ADDITIONAL NOTES:
  8125.  
  8126.              The string str is left justified in place. 
  8127.  
  8128.              This funtion should not be used with literal character 
  8129.              strings (e.g. wn_sleft(" left justify this");).
  8130.  
  8131.              Leading white space is converted to trailing white space.
  8132.  
  8133.  
  8134.         10.68. wn_srightj -- (string) right justify 
  8135.  
  8136.         USAGE
  8137.  
  8138.              wn_srightj(str)
  8139.  
  8140.                   (char *) str - string to right justify.
  8141.  
  8142.         RETURNS:
  8143.  
  8144.              Pointer to str.
  8145.  
  8146.         CAUTIONS and ADDITIONAL NOTES:
  8147.  
  8148.              The string str is right justified in place.  
  8149.  
  8150.              This funtion should not be used with literal character 
  8151.              strings (e.g. wn_srightj("right justify this   ");).
  8152.  
  8153.              Trailing white space is converted to leading white space.
  8154.  
  8155.  
  8156.  
  8157.  
  8158.  
  8159.  
  8160.  
  8161.  
  8162.  
  8163.  
  8164.  
  8165.  
  8166.  
  8167.  
  8168.                                                            Page: 133
  8169.                                                      The Window BOSS
  8170.  
  8171.  
  8172.  
  8173.         10.69. wn_scenter -- (string) center 
  8174.  
  8175.         USAGE
  8176.  
  8177.              wn_scenter(sr,tr,w)
  8178.  
  8179.                   (char *) sr - the string to center - source
  8180.                   (char *) tr - the centered string  - target
  8181.                                 tr contains the results of centering
  8182.                   int w       - desired width of centered string 
  8183.           
  8184.         RETURNS:
  8185.  
  8186.              Pointer to tr.
  8187.           
  8188.         CAUTIONS and ADDITIONAL NOTES:
  8189.  
  8190.              tr must be a pointer to a character array of at least
  8191.              w+1 in size.
  8192.  
  8193.              The source string pointed to by sr is not altered in any 
  8194.              way.
  8195.  
  8196.              Both leading and trailing white space of the source string 
  8197.              are considered part of the string to be centered.
  8198.                                       
  8199.                                       Desired Width (W)
  8200.                         |------------------------------------------|
  8201.  
  8202.                   source "this is a simple example"
  8203.                   target|         this is a simple example         |
  8204.  
  8205.                   source "        this is an example toooo"
  8206.                   target|             this is an example toooo     |
  8207.  
  8208.              This fuction is intended to deal with strings that do not 
  8209.              have leading or trailing white space.  WN_SDELSPC can be 
  8210.              called to prepare the string for centering.
  8211.  
  8212.  
  8213.  
  8214.  
  8215.  
  8216.  
  8217.  
  8218.  
  8219.  
  8220.  
  8221.  
  8222.  
  8223.  
  8224.  
  8225.  
  8226.  
  8227.  
  8228.  
  8229.                                                            Page: 134
  8230.                                                      The Window BOSS
  8231.  
  8232.  
  8233.  
  8234.         10.70. wn_sdelspc -- (string) delete leading/trailing spaces
  8235.  
  8236.         USAGE
  8237.  
  8238.              wn_sdelspc(str, code)
  8239.  
  8240.                   char *str - string to be treated
  8241.                   int code  - operation code:
  8242.                                 1 = delete leading
  8243.                                 2 = delete trailing
  8244.                                 3 = delete both
  8245.           
  8246.         RETURNS:
  8247.  
  8248.              Pointer to str.
  8249.  
  8250.         CAUTIONS and ADDITIONAL NOTES:
  8251.  
  8252.              All operations are performed in place.
  8253.  
  8254.              This funtion should not be used with literal character 
  8255.              strings (e.g. wn_sdelspc(" mumble fratz  ", 3);).
  8256.  
  8257.  
  8258.         10.71. wn_strndx -- (string) return index of s2 in s1
  8259.  
  8260.         USAGE
  8261.  
  8262.              wn_strndx(s1,s2,off)
  8263.  
  8264.                   (char *) s1 - pointer to string s1
  8265.                   (char *) s2 - pointer to string s2
  8266.                   int off     - s1 offset for search start
  8267.                     
  8268.         RETURNS:
  8269.  
  8270.              The index (a.k.a. subscript or offset) of where s2 begins in 
  8271.              s1, or (-1) if s2 could not be found in s1.
  8272.  
  8273.  
  8274.         CAUTIONS and ADDITIONAL NOTES:
  8275.  
  8276.              A value for "off" must be provided. 
  8277.  
  8278.  
  8279.  
  8280.  
  8281.  
  8282.  
  8283.  
  8284.  
  8285.  
  8286.  
  8287.  
  8288.  
  8289.  
  8290.                                                            Page: 135
  8291.                                                      The Window BOSS
  8292.  
  8293.  
  8294.  
  8295.         10.72. mo_reset -- reset/init mouse
  8296.  
  8297.         USAGE
  8298.  
  8299.              ms = (MOUSEPTR) mo_reset()
  8300.              MOUSEPTR ms;
  8301.  
  8302.                   ms - mouse handle 
  8303.  
  8304.              mo_reset() must be the 1st mouse function called.
  8305.  
  8306.              Low level and applications level interface function.
  8307.  
  8308.         RETURNS
  8309.  
  8310.              mo = mouse handle or MOLPTR (null) if error
  8311.  
  8312.         CAUTIONS and ADDITIONAL NOTES
  8313.  
  8314.              Any program that uses a mouse must first initialize it in 
  8315.              order to avoid dealing with the mouse in an unknown state.  
  8316.              This function clears the mouse status to a "power on" state, 
  8317.              places the mouse's cursor in the center of the screen 
  8318.              (although hidden) and sets the mouse's active region to the 
  8319.              full screen.
  8320.  
  8321.              Requires "winboss.h" to be "#include"d.
  8322.  
  8323.              MOUSEPTR is defined in "winboss.h"     
  8324.  
  8325.              Example:
  8326.  
  8327.                   #include "winboss.h"
  8328.                   main()
  8329.                   {
  8330.                   MOUSEPTR ms;
  8331.                        ms=mo_reset();           /* init mouse */
  8332.                        if(ms) {
  8333.                             .....               /* do other things */
  8334.                             exit(0);            /* finito */
  8335.                        }
  8336.                        else {
  8337.                             ... no mouse
  8338.                        }
  8339.                   }
  8340.                   /* End */
  8341.  
  8342.  
  8343.  
  8344.  
  8345.  
  8346.  
  8347.  
  8348.  
  8349.  
  8350.  
  8351.                                                            Page: 136
  8352.                                                      The Window BOSS
  8353.  
  8354.  
  8355.  
  8356.         10.73. mo_show -- show mouse
  8357.  
  8358.         USAGE
  8359.  
  8360.              mo_show(ms)
  8361.              MOUSEPTR ms;
  8362.  
  8363.                   ms - mouse handle
  8364.  
  8365.              Display (show, unhide) the mouse cursor.  
  8366.              
  8367.              Low level and applications level interface function.
  8368.  
  8369.         RETURNS
  8370.  
  8371.              Nothing.     
  8372.  
  8373.         CAUTIONS and ADDITIONAL NOTES
  8374.  
  8375.              Example:
  8376.  
  8377.                   #include "winboss.h"
  8378.                   main()
  8379.                   {
  8380.                   MOUSEPTR ms;
  8381.                        ms=mo_reset();           /* init mouse */
  8382.                        if(ms) {
  8383.                             mo_show(ms);        /* show mouse */
  8384.                             .....               /* do other things */
  8385.                             exit(0);            /* finito */
  8386.                        }
  8387.                        else {
  8388.                             ... no mouse
  8389.                        }
  8390.                   }
  8391.                   /* End */
  8392.  
  8393.              Failure to call mo_show() will cause the mouse to never be 
  8394.              displayed.  mo_show() is usually called after mo_reset().
  8395.  
  8396.  
  8397.  
  8398.  
  8399.  
  8400.  
  8401.  
  8402.  
  8403.  
  8404.  
  8405.  
  8406.  
  8407.  
  8408.  
  8409.  
  8410.  
  8411.  
  8412.                                                            Page: 137
  8413.                                                      The Window BOSS
  8414.  
  8415.  
  8416.  
  8417.         10.74. mo_hide -- hide mouse
  8418.  
  8419.         USAGE
  8420.  
  8421.              mo_hide(ms)
  8422.              MOUSEPTR ms;
  8423.  
  8424.                   ms - mouse handle
  8425.  
  8426.              Hide (unshow, make invisible) the mouse cursor.  
  8427.  
  8428.              Low level and applications level interface function.
  8429.  
  8430.         RETURNS
  8431.  
  8432.              Nothing.
  8433.  
  8434.         CAUTIONS and ADDITIONAL NOTES
  8435.  
  8436.              The only way to display the mouse cursor after it is hidden 
  8437.              is by calling mo_show().
  8438.  
  8439.              Example:
  8440.  
  8441.                   #include "winboss.h"
  8442.                   main()
  8443.                   {
  8444.                   MOUSEPTR ms;
  8445.                        ms=mo_reset();           /* init mouse */
  8446.                        if(ms) {
  8447.                             mo_show(ms);        /* show mouse */
  8448.                             v_getch();          /* wait for key hit */
  8449.                             mo_hide(ms);        /* hide mouse */
  8450.                             exit(0);            /* finito */
  8451.                        }
  8452.                        else {
  8453.                             ... no mouse
  8454.                        }
  8455.                   }
  8456.                   /* End */
  8457.  
  8458.  
  8459.  
  8460.  
  8461.  
  8462.  
  8463.  
  8464.  
  8465.  
  8466.  
  8467.  
  8468.  
  8469.  
  8470.  
  8471.  
  8472.  
  8473.                                                            Page: 138
  8474.                                                      The Window BOSS
  8475.  
  8476.  
  8477.  
  8478.         10.75. mo_pos -- get mouse pixel position & status
  8479.  
  8480.         USAGE
  8481.  
  8482.              mo_pos(ms)
  8483.              MOUSEPTR ms;
  8484.  
  8485.                   ms - mouse handle
  8486.  
  8487.              This function updates the mouse control block with current 
  8488.              mouse status information - physical location and button 
  8489.              status.  This information is provided in real time and in 
  8490.              the mouse's 640 x 200 pixel array corrdinate system.
  8491.  
  8492.              Low level interface function.
  8493.  
  8494.         RETURNS
  8495.  
  8496.              Nothing. 
  8497.  
  8498.              Updates - Members of the mouse control block:
  8499.  
  8500.                ms->bstat - bit 0 set if left button is CURRENTLY down 
  8501.                            bit 1 set if right button is CURRENTLY down
  8502.                            bit 2 set if center button is CURRENTLY down
  8503.                                       
  8504.                ms->row   - mouse pixel row location 
  8505.                ms->col   - mouse pixel col location
  8506.  
  8507.         CAUTIONS and ADDITIONAL NOTES
  8508.  
  8509.              All information is reported in real time.  If the mouse is 
  8510.              in the process of being moved, the information returned may 
  8511.              not be indicative of the final destination. 
  8512.  
  8513.              This funtion is typically used in graphics mode (which The 
  8514.              Window BOSS does not support).  It is handy for "etch-a-
  8515.              sketch" type pixel drawing programs.  
  8516.  
  8517.              Making infrequent calls to this routine can cause your 
  8518.              program to miss button clicks. 
  8519.  
  8520.              Text (80x25) row and column coordinates can be determined by 
  8521.              dividing m->row and m->col by 8.
  8522.  
  8523.              The recommended way to obtain accurate information in a more 
  8524.              useful format is by using mo_wait in conjunction with 
  8525.              mo_rcpos.
  8526.  
  8527.  
  8528.              Also see "mo_rcpos", "mo_wait".
  8529.  
  8530.  
  8531.  
  8532.  
  8533.  
  8534.                                                            Page: 139
  8535.                                                      The Window BOSS
  8536.  
  8537.  
  8538.  
  8539.         10.76. mo_move -- move mouse pixel cursor
  8540.  
  8541.         USAGE
  8542.  
  8543.              mo_move(ms, row, col)
  8544.              MOUSEPTR ms;
  8545.              int row,col;
  8546.  
  8547.                   ms -  mouse handle
  8548.                   row - new pixel row value 
  8549.                   col - new pixel col value
  8550.  
  8551.              This function moves the mouse to a new physical location in 
  8552.              the mouse's 640 x 200 pixel array coordinate system.
  8553.  
  8554.              Low level interface function.
  8555.  
  8556.         RETURNS
  8557.  
  8558.              Nothing.
  8559.  
  8560.         CAUTIONS and ADDITIONAL NOTES
  8561.  
  8562.              Pixel row and column coordinates can be determined by 
  8563.              multiplying the text (80x25) coordinates by 8.  
  8564.  
  8565.              Also see "mo_locate".
  8566.  
  8567.  
  8568.  
  8569.  
  8570.  
  8571.  
  8572.  
  8573.  
  8574.  
  8575.  
  8576.  
  8577.  
  8578.  
  8579.  
  8580.  
  8581.  
  8582.  
  8583.  
  8584.  
  8585.  
  8586.  
  8587.  
  8588.  
  8589.  
  8590.  
  8591.  
  8592.  
  8593.  
  8594.  
  8595.                                                            Page: 140
  8596.                                                      The Window BOSS
  8597.  
  8598.  
  8599.  
  8600.         10.77. mo_pbinfo -- get pressed mouse botton status
  8601.  
  8602.         USAGE
  8603.  
  8604.              mo_pbinfo(ms,button)
  8605.              MOUSEPTR ms;
  8606.              int button;
  8607.  
  8608.                   ms     -  mouse handle
  8609.                   button -  button of interest (MO_LEFT or MO_RIGHT)
  8610.  
  8611.              Low level interface function.
  8612.  
  8613.         RETURNS
  8614.  
  8615.              Nothing. 
  8616.  
  8617.              Updates - Members of the mouse control block:
  8618.  
  8619.                ms->bstat  - bit 0 set if left button is CURRENTLY down 
  8620.                             bit 1 set if right button is CURRENTLY down
  8621.                             bit 2 set if center button is CURRENTLY down
  8622.                ms->nclick - number of times the requseted button has 
  8623.                             been pressed since last call.
  8624.                ms->row    - mouse pixel row location of last press
  8625.                ms->col    - mouse pixel col location of last press
  8626.  
  8627.         CAUTIONS and ADDITIONAL NOTES
  8628.  
  8629.              The mouse device driver is a pretty smart critter.  It keeps 
  8630.              track of a number of things, one of them being the number of 
  8631.              times a particular button has been pressed or released since 
  8632.              the last time someone has asked about it.  This function 
  8633.              returns pressed button information about a specific button 
  8634.              (MO_LEFT or MO_RIGHT), and it also returns the real time 
  8635.              button status in the same format as mo_pos().  
  8636.  
  8637.              The ms->row and ms->column locations in the mouse control 
  8638.              block are from the last press of the specified button.
  8639.  
  8640.              This function, like mo_pos, provides limited value for most 
  8641.              applications programs.  A better choice is mo_rbinfo 
  8642.              (released button information and status), since the mouse 
  8643.              device driver waits for the user to RELEASE the specified 
  8644.              button before it updates the internal counters.
  8645.  
  8646.              MO_LEFT and MO_RIGHT are defined in "winboss.h"
  8647.  
  8648.              Calling mo_pbinfo clears the mouse's pressed button history 
  8649.              counters.
  8650.  
  8651.              Also see "mo_press", "mo_release", "mo_rbinfo"
  8652.  
  8653.  
  8654.  
  8655.  
  8656.                                                            Page: 141
  8657.                                                      The Window BOSS
  8658.  
  8659.  
  8660.  
  8661.         10.78. mo_rbinfo -- get released mouse button status
  8662.  
  8663.              mo_rbinfo(ms,button)
  8664.              MOUSEPTR ms;
  8665.              int button;
  8666.  
  8667.                   ms     -  mouse handle
  8668.                   button -  button of interest (MO_LEFT or MO_RIGHT)
  8669.  
  8670.              Low level interface function.
  8671.  
  8672.         RETURNS
  8673.  
  8674.              Nothing. 
  8675.  
  8676.              Updates - Members of the mouse control block:
  8677.  
  8678.                ms->bstat  - bit 0 set if left has been released 
  8679.                             bit 1 set if right button has been released
  8680.                             bit 2 set if center button "   "    "
  8681.                ms->nclick - number of times the requseted button has 
  8682.                             been pressed and released since last call.
  8683.                ms->row    - mouse pixel row location of last release
  8684.                ms->col    - mouse pixel col location of last release 
  8685.  
  8686.         CAUTIONS and ADDITIONAL NOTES
  8687.  
  8688.              The mouse device driver is a pretty smart critter.  It keeps 
  8689.              track of a number of things, one of them being the number of 
  8690.              times a particular button has been pressed or released since 
  8691.              the last time someone has asked about it.  This function 
  8692.              returns released button information about a specific button 
  8693.              (MO_LEFT or MO_RIGHT), and it also returns the real time 
  8694.              button status in the same format as mo_pos().  
  8695.  
  8696.              The ms->row and ms->column locations in the mouse control 
  8697.              block are from the last button release  of the specified 
  8698.              button.
  8699.  
  8700.              The mouse device driver waits for the user to RELEASE the 
  8701.              specified button before it updates the internal counters.
  8702.  
  8703.              MO_LEFT and MO_RIGHT are defined in "winboss.h"
  8704.  
  8705.              Calling mo_rbinfo clears the mouse's pressed button history 
  8706.              counters.
  8707.  
  8708.              Also see "mo_release", "mo_press", "mo_pbinfo"
  8709.  
  8710.  
  8711.  
  8712.  
  8713.  
  8714.  
  8715.  
  8716.  
  8717.                                                            Page: 142
  8718.                                                      The Window BOSS
  8719.  
  8720.  
  8721.  
  8722.         10.79. mo_clim -- set mouse min/max pixel column limits
  8723.  
  8724.         USAGE
  8725.  
  8726.              mo_clim(ms,min,max)
  8727.              MOUSEPTR ms;
  8728.              int min, mix;
  8729.  
  8730.                   ms   - mouse handle
  8731.                   min  - column minimum in pixels (0 to 639)
  8732.                   max  - column maximum in pixels (0 to 639)
  8733.  
  8734.              mo_clim and mo_rlim limit the operational area of the mouse.  
  8735.              Together they define the mouse's hot area, or if you prefer, 
  8736.              they establish a fence/cage around the mouse. 
  8737.  
  8738.              Low level interface function.
  8739.  
  8740.         RETURNS
  8741.  
  8742.              Nothing.
  8743.  
  8744.         CAUTIONS and ADDITIONAL NOTES
  8745.  
  8746.              min and max are not range checked, 0 is on the left.
  8747.  
  8748.              Also see "mo_reigon"
  8749.  
  8750.         10.80. mo_rlim -- set mouse min/max pixel row limits
  8751.  
  8752.         USAGE
  8753.  
  8754.              mo_clim(ms,min,max)
  8755.              MOUSEPTR ms;
  8756.              int min, mix;
  8757.  
  8758.                   ms   - mouse handle
  8759.                   min  - row minimum in pixels (0 to 199)
  8760.                   max  - row maximum in pixels (0 to 199)
  8761.  
  8762.              mo_clim and mo_rlim limit the operational area of the mouse.  
  8763.              Together they define the mouse's hot area, or if you prefer, 
  8764.              they establish a fence/cage around the mouse. 
  8765.  
  8766.              Low level interface function.
  8767.  
  8768.         RETURNS
  8769.  
  8770.              Nothing.
  8771.  
  8772.         CAUTIONS and ADDITIONAL NOTES
  8773.  
  8774.              min and max are not range checked, 0 is at the top.
  8775.  
  8776.  
  8777.  
  8778.                                                            Page: 143
  8779.                                                      The Window BOSS
  8780.  
  8781.  
  8782.  
  8783.         10.81. mo_sgcursor -- set mouse graphics cursor
  8784.  
  8785.         USAGE
  8786.  
  8787.              mo_sgcursor(ms, hhot, vhot, seg, off)
  8788.              MOUSEPTR ms;
  8789.              int hhot, vhot;
  8790.              unsigned int seg, off;
  8791.  
  8792.                   ms         - mouse handle
  8793.                   hhot, vhot - X & Y relative coordinates of hot spot
  8794.                   seg, off   - segment and offset of mask set
  8795.  
  8796.              Low level interface function.
  8797.  
  8798.         RETURNS
  8799.  
  8800.              Nothing.
  8801.  
  8802.         CAUTIONS and ADDITIONAL NOTES
  8803.  
  8804.              This is an unsupported function that is useful in graphics 
  8805.              mode only.  
  8806.  
  8807.              This function is not to be used in conjunction with The 
  8808.              Window BOSS or Data Clerk.
  8809.  
  8810.              Refer to the Microsoft and/or Logitech API manuals for a 
  8811.              complete description of mouse function 9.
  8812.  
  8813.              Use "mo_scursor" or "mo_setptr" to set the mouse cursor.
  8814.  
  8815.  
  8816.  
  8817.  
  8818.  
  8819.  
  8820.  
  8821.  
  8822.  
  8823.  
  8824.  
  8825.  
  8826.  
  8827.  
  8828.  
  8829.  
  8830.  
  8831.  
  8832.  
  8833.  
  8834.  
  8835.  
  8836.  
  8837.  
  8838.  
  8839.                                                            Page: 144
  8840.                                                      The Window BOSS
  8841.  
  8842.  
  8843.  
  8844.         10.82. mo_scursor -- set mouse cursor
  8845.  
  8846.         USAGE
  8847.  
  8848.              mo_scursor(ms, type, start, stop)
  8849.              MOUSEPTR ms;
  8850.              int type, start, stop;
  8851.  
  8852.                   ms    - mouse pointer
  8853.                   type  - cursor type: 
  8854.                             MO_HDW for hardware
  8855.                             MO_SFT for software
  8856.                   start - start scan line
  8857.                   stop  - stop scan line
  8858.  
  8859.              When using a mouse, you can choose between two types of text 
  8860.              cursors, which are hardware or software.  The hardware 
  8861.              (MO_HDW) cursor puts the video adapters text cursor under 
  8862.              control of the mouse.  This results in a single cursor 
  8863.              appearing on the screen for both the mouse and text.  The 
  8864.              software cursor (MO_SFT) allows two cursors to appear on the 
  8865.              screen, the normal text cursor and a mouse cursor that can 
  8866.              take on a user defined shape and attribute.  The software 
  8867.              cursor is the default and is a simple full-cell inverse 
  8868.              video cursor.
  8869.  
  8870.              Using the hardware cursor type MO_HDW:
  8871.  
  8872.                   start - start scan line (usually 0)
  8873.                   stop  - stop scan line:
  8874.                             monochrome max = 12
  8875.                             non mon    max =  7
  8876.  
  8877.              Using the software cursor type MO_SFT:
  8878.  
  8879.                Option 1 (user defined):
  8880.                   
  8881.                   start - 0x00 
  8882.                   stop  - display attributes in upper 8 bits.
  8883.                           ASCII character to be used as cursor in lower 8 
  8884.                           bits.
  8885.  
  8886.                   For example, to set the software cursor to a white 
  8887.                   happy face on a black background:
  8888.  
  8889.                        mo_scursor(ms, MO_SFT, 0x00, 0x0703);     
  8890.  
  8891.  
  8892.                                                      continued...    
  8893.  
  8894.  
  8895.  
  8896.  
  8897.  
  8898.  
  8899.  
  8900.                                                            Page: 145
  8901.                                                      The Window BOSS
  8902.  
  8903.  
  8904.  
  8905.         mo_scursor - continued.
  8906.  
  8907.  
  8908.  
  8909.                Option 2 (see through rectangle):
  8910.  
  8911.                   start - 0x77ff
  8912.                   stop  - 0x00
  8913.  
  8914.                   For example, to set the software cursor to a see 
  8915.                   through block:
  8916.  
  8917.                        mo_scursor(ms, MO_SOFT, 0x77ff, 7700);     
  8918.  
  8919.              Low level interface function.
  8920.  
  8921.         RETURNS
  8922.  
  8923.              Nothing.
  8924.  
  8925.         CAUTIONS and ADDITIONAL NOTES
  8926.  
  8927.              See also "mo_setptr".
  8928.  
  8929.  
  8930.  
  8931.  
  8932.  
  8933.  
  8934.  
  8935.  
  8936.  
  8937.  
  8938.  
  8939.  
  8940.  
  8941.  
  8942.  
  8943.  
  8944.  
  8945.  
  8946.  
  8947.  
  8948.  
  8949.  
  8950.  
  8951.  
  8952.  
  8953.  
  8954.  
  8955.  
  8956.  
  8957.  
  8958.  
  8959.  
  8960.  
  8961.                                                            Page: 146
  8962.                                                      The Window BOSS
  8963.  
  8964.  
  8965.  
  8966.         10.83. mo_motion  -- get mouse motion counters
  8967.  
  8968.         USAGE
  8969.  
  8970.              mo_motion(ms)
  8971.              MOUSEPTR ms;
  8972.  
  8973.                   ms - mouse handle
  8974.  
  8975.              Low level interface function.
  8976.  
  8977.         RETURNS
  8978.  
  8979.              Nothing.
  8980.  
  8981.              Updates - Members of the mouse control block:
  8982.  
  8983.                ms->vmove - vertical move counter since last call
  8984.                ms->hmove - horizontal move counter since last call
  8985.  
  8986.         CAUTIONS and ADDITIONAL NOTES
  8987.  
  8988.              The mouse motion counters are reset after each call.
  8989.  
  8990.  
  8991.  
  8992.  
  8993.  
  8994.  
  8995.  
  8996.  
  8997.  
  8998.  
  8999.  
  9000.  
  9001.  
  9002.  
  9003.  
  9004.  
  9005.  
  9006.  
  9007.  
  9008.  
  9009.  
  9010.  
  9011.  
  9012.  
  9013.  
  9014.  
  9015.  
  9016.  
  9017.  
  9018.  
  9019.  
  9020.  
  9021.  
  9022.                                                            Page: 147
  9023.                                                      The Window BOSS
  9024.  
  9025.  
  9026.  
  9027.         10.84. mo_task -- define mouse event handler
  9028.  
  9029.         USAGE
  9030.  
  9031.              mo_task(m, mask, seg, off)
  9032.              WINDOWPTR m;
  9033.              unsigned int mask, seg, off;
  9034.  
  9035.                   m    - mouse handle
  9036.                   mask - event mask
  9037.                             BIT            EVENT
  9038.                              0             Mouse cursor moved
  9039.                              1             Left Button pressed
  9040.                              2             Left button released
  9041.                              3             Right button pressed
  9042.                              4             Right button released
  9043.                              5             Middle button pressed
  9044.                              6             Middle button released
  9045.                   seg  - segment address of handler routine
  9046.                   off  - offset portion of handler routine address
  9047.  
  9048.              This function, if properly implemented, can keep your code 
  9049.              free of frequent mouse checks.  The basic notion is to 
  9050.              "attach" a function in your program to the mouse device 
  9051.              driver.  This function would be invoked whenever any one of 
  9052.              the above events took place.  Your function would then 
  9053.              execute at interrupt level.  There are a few shortcomings, 
  9054.              however, your function can not perform any I/O, make any 
  9055.              calls to DOS or call any of the ROM BIOS routines.  What can 
  9056.              it do?  Actually not much other than record the fact than an 
  9057.              event took place and dismiss the interupt.  Your program can 
  9058.              then process the event at its convenience.  
  9059.  
  9060.              The difficulty with using this function is due to the fact 
  9061.              that your function MUST look like an interupt service 
  9062.              routine in both the way it beings and finishes executing.  
  9063.              This form of code generation is something most "C" compilers 
  9064.              are not very good at, and as a result most of these handler 
  9065.              routines have to be written in assembly language.  This 
  9066.              function is provided as a convenience to those who are 
  9067.              familar with writing these types of programs - it is not 
  9068.              supported by Star Guidance.
  9069.  
  9070.         RETURNS
  9071.  
  9072.              Nothing.
  9073.  
  9074.         CAUTIONS and ADDITIONAL NOTES
  9075.  
  9076.              This is an unsupported function.
  9077.  
  9078.              Refer to the Microsoft and/or Logitech API manuals for a 
  9079.              complete description of mouse function 12.
  9080.  
  9081.  
  9082.  
  9083.                                                            Page: 148
  9084.                                                      The Window BOSS
  9085.  
  9086.  
  9087.  
  9088.         10.85. mo_lpon -- mouse light pen emulation on
  9089.         10.86. mo_lpoff -- mouse light pen emulation off
  9090.  
  9091.         USAGE
  9092.  
  9093.              mo_lpon(ms)
  9094.              MOUSEPTR ms;
  9095.  
  9096.              mo_lpoff(ms)
  9097.              MOUSEPTR ms;
  9098.  
  9099.                   ms - mouse handle
  9100.  
  9101.              These functions allow software that exepects to find a light 
  9102.              pen to respond (or not to respond) to the mouse as if it 
  9103.              were a light pen.  By default, light pen emluation is 
  9104.              enabled - mo_reset() automatically turns on light pen 
  9105.              emulation.
  9106.  
  9107.              Low level and applications level interface function.
  9108.  
  9109.         RETURNS
  9110.  
  9111.              Nothing.
  9112.  
  9113.         CAUTIONS and ADDITIONAL NOTES
  9114.  
  9115.              None.
  9116.  
  9117.  
  9118.         10.87. mo_ratio -- set motion to pixel ratio
  9119.  
  9120.         USAGE
  9121.  
  9122.              mo_ratio(ms)
  9123.              MOUSEPTR ms;
  9124.  
  9125.                   ms - mouse handle
  9126.  
  9127.              Set the motion to pixel ratio (graphics mode).
  9128.  
  9129.              Low level interface function.
  9130.  
  9131.         RETURNS
  9132.  
  9133.              Nothing.
  9134.  
  9135.         CAUTIONS and ADDITIONAL NOTES
  9136.  
  9137.              This is an unsupported function.
  9138.  
  9139.              Refer to the Microsoft and/or Logitech API manuals for a 
  9140.              complete description of mouse function 15.
  9141.  
  9142.  
  9143.  
  9144.                                                            Page: 149
  9145.                                                      The Window BOSS
  9146.  
  9147.  
  9148.  
  9149.         10.88. mo_rcpos -- return current position of mouse
  9150.  
  9151.         USAGE
  9152.  
  9153.              mo_rcpos(ms, status, row, col)
  9154.              MOUSEPTR ms;
  9155.              int *status, *row, *col;
  9156.  
  9157.                   ms      - mouse handle
  9158.                   *status - pointer to int to receive mouse status
  9159.                               bit 0 set if left button is CURRENTLY down 
  9160.                               bit 1 set if right button is CURRENTLY down
  9161.                               bit 2 set if center button is CURRENTLY down
  9162.                   *row    - pointer to int to receive position
  9163.                             of mouse row (0-25)
  9164.                   *col    - pointer to int to receive position
  9165.                             of mouse column (0-79)
  9166.  
  9167.              Applications level interface function.
  9168.  
  9169.         RETURNS
  9170.  
  9171.              Nothing.
  9172.  
  9173.              Updates - Members of the mouse control block:
  9174.  
  9175.                ms->bstat - bit 0 set if left button is CURRENTLY down 
  9176.                            bit 1 set if right button is CURRENTLY down
  9177.                            bit 2 set if center button is CURRENTLY down
  9178.                                       
  9179.                ms->row   - mouse pixel row location 
  9180.                ms->col   - mouse pixel col location
  9181.  
  9182.  
  9183.                                                      continued....
  9184.  
  9185.  
  9186.  
  9187.  
  9188.  
  9189.  
  9190.  
  9191.  
  9192.  
  9193.  
  9194.  
  9195.  
  9196.  
  9197.  
  9198.  
  9199.  
  9200.  
  9201.  
  9202.  
  9203.  
  9204.  
  9205.                                                            Page: 150
  9206.                                                      The Window BOSS
  9207.  
  9208.  
  9209.  
  9210.         mo_rcpos - continued.
  9211.  
  9212.  
  9213.  
  9214.              CAUTIONS and ADDITIONAL NOTES
  9215.  
  9216.              Example:
  9217.  
  9218.                   #include "winboss.h"
  9219.                   main()
  9220.                   {
  9221.                   MOUSEPTR ms;
  9222.                   int st, row, col;
  9223.                        ms=mo_reset();           /* init mouse */
  9224.                        if(ms) {
  9225.                                                 /* fetch status */
  9226.                             mo_rcpos(ms, &st, &row, &col);
  9227.                             mo_show(ms);        /* show mouse */
  9228.                             v_getch();          /* wait for key hit */
  9229.                             mo_hide(ms);        /* hide mouse */
  9230.                             exit(0);            /* finito */
  9231.                        }
  9232.                        else {
  9233.                             ... no mouse
  9234.                        }
  9235.                   }
  9236.                   /* End */
  9237.  
  9238.              Note the use of pointers.
  9239.  
  9240.              All information is reported in real time.  If the mouse is 
  9241.              in the process of being moved the information returned may 
  9242.              not be indicative of the final destination. 
  9243.  
  9244.              Making infrequent calls to this routine can cause your 
  9245.              program to miss button clicks. 
  9246.  
  9247.              The recommended way to obtain accurate information is by 
  9248.              using mo_wait in conjunction with mo_rcpos.
  9249.  
  9250.              See also mo_pos(), mo_wait()
  9251.  
  9252.  
  9253.  
  9254.  
  9255.  
  9256.  
  9257.  
  9258.  
  9259.  
  9260.  
  9261.  
  9262.  
  9263.  
  9264.  
  9265.  
  9266.                                                            Page: 151
  9267.                                                      The Window BOSS
  9268.  
  9269.  
  9270.  
  9271.         10.89. mo_locate -- locate (position) mouse cursor
  9272.  
  9273.         USAGE
  9274.  
  9275.              mo_locate(ms, row, col)
  9276.              MOUSEPTR ms;
  9277.              int row, col;
  9278.  
  9279.                   ms   - mouse handle
  9280.                   row  - destination row (0-24)
  9281.                   col  - destination column (0-79)
  9282.  
  9283.              mo_locate positions the mouse to the row and column 
  9284.              specified.
  9285.  
  9286.              Applications level interface function.
  9287.  
  9288.         RETURNS
  9289.  
  9290.              Nothing.
  9291.  
  9292.         CAUTIONS and ADDITIONAL NOTES
  9293.  
  9294.              Example:
  9295.  
  9296.                   #include "winboss.h"
  9297.                   main()
  9298.                   {
  9299.                   MOUSEPTR ms;
  9300.                   int st, row, col;
  9301.                        ms=mo_reset();           /* init mouse */
  9302.                        if(ms) {
  9303.                                                 /* fetch status */
  9304.                             mo_rcpos(ms, &st, &row, &col);
  9305.                             if(row != 0)        /* home the mouse ?? */
  9306.                               mo_locate(ms, 0, 0);
  9307.                             mo_show(ms);        /* show mouse */
  9308.                             v_getch();          /* wait for key hit */
  9309.                             mo_hide(ms);        /* hide mouse */
  9310.                             exit(0);            /* finito */
  9311.                        }
  9312.                        else {
  9313.                             ... no mouse
  9314.                        }
  9315.                   }
  9316.                   /* End */
  9317.  
  9318.              Values are not range checked.
  9319.  
  9320.  
  9321.  
  9322.  
  9323.  
  9324.  
  9325.  
  9326.  
  9327.                                                            Page: 152
  9328.                                                      The Window BOSS
  9329.  
  9330.  
  9331.  
  9332.         10.90. mo_press -- get mouse button press status
  9333.  
  9334.         USAGE
  9335.  
  9336.              mo_press(ms, button, status, nclick, row, col)
  9337.              MOUSEPTR ms;
  9338.              int button;
  9339.              int *status, *nclick, *row, *col;
  9340.  
  9341.                   ms      - mouse handle
  9342.                   button  - button of interest (MO_LEFT or MO_RIGHT)
  9343.                   status  - pointer to int to receive status information.
  9344.                               bit 0 set if left button is CURRENTLY down 
  9345.                               bit 1 set if right button is CURRENTLY down
  9346.                               bit 2 set if center button is CURRENTLY down
  9347.                   nclick  - pointer to int to receive number of times the 
  9348.                             mouse button specified by button has been 
  9349.                             pressed since last call. Zero indicates the 
  9350.                             button has not been pressed since the last 
  9351.                             call.
  9352.                   row     - pointer to int to receive row (0-24) of last 
  9353.                             button press.
  9354.                   col     - pointer to int to receive column (0-79) of 
  9355.                             last button press.
  9356.  
  9357.              Applications level interface function.
  9358.  
  9359.         RETURNS
  9360.  
  9361.              Nothing.
  9362.  
  9363.              Updates - Members of the mouse control block:
  9364.  
  9365.                ms->bstat  - bit 0 set if left button is CURRENTLY down 
  9366.                             bit 1 set if right button is CURRENTLY down
  9367.                             bit 2 set if center button is CURRENTLY down
  9368.                ms->nclick - number of times the requested button has been 
  9369.                             pressed since last call.
  9370.                ms->row    - mouse pixel row location of last press
  9371.                ms->col    - mouse pixel col location of last press
  9372.  
  9373.  
  9374.                                                      continued....
  9375.  
  9376.  
  9377.  
  9378.  
  9379.  
  9380.  
  9381.  
  9382.  
  9383.  
  9384.  
  9385.  
  9386.  
  9387.  
  9388.                                                            Page: 153
  9389.                                                      The Window BOSS
  9390.  
  9391.  
  9392.  
  9393.         mo_press - continued.
  9394.  
  9395.  
  9396.  
  9397.         CAUTIONS and ADDITIONAL NOTES
  9398.  
  9399.              Example:
  9400.  
  9401.                   #include "winboss.h"
  9402.                   main()
  9403.                   {
  9404.                   MOUSEPTR ms;
  9405.                   int st, row, col;
  9406.                        ms=mo_reset();           /* init mouse */
  9407.                        if(ms) {
  9408.                                                 /* fetch status */
  9409.                           mo_rcpos(ms, &st, &row, &col);
  9410.                           if(row != 0)          /* home the mouse ?? */
  9411.                             mo_locate(ms, 0, 0);
  9412.                           mo_show(ms);          /* show mouse */
  9413.                           do {                  /* loop till press */
  9414.                             mo_wait(ms);        /* let mouse settle */
  9415.                             mo_press(ms, MO_LEFT, &st, &nc, &row, &col);
  9416.                           } while(!nc); 
  9417.                           mo_hide(ms);          /* hide mouse */
  9418.                           exit(0);              /* finito */
  9419.                        }
  9420.                        else {
  9421.                             ... no mouse
  9422.                        }
  9423.                   }
  9424.                   /* End */
  9425.  
  9426.              Note use of POINTERS.
  9427.  
  9428.              MO_LEFT and MO_RIGHT are defined in "winboss.h"
  9429.  
  9430.              Calling mo_press clears the mouse's pressed button history 
  9431.              counters.
  9432.  
  9433.              Since mo_release waits for the mouse button to be released 
  9434.              before updating the device drivers internal tables, it is a 
  9435.              better choice for most applications.
  9436.  
  9437.              Also see "mo_pbinfo"
  9438.  
  9439.  
  9440.  
  9441.  
  9442.  
  9443.  
  9444.  
  9445.  
  9446.  
  9447.  
  9448.  
  9449.                                                            Page: 154
  9450.                                                      The Window BOSS
  9451.  
  9452.  
  9453.  
  9454.         10.91. mo_release -- get mouse button release status
  9455.  
  9456.         USAGE
  9457.  
  9458.              mo_release(ms, button, status, nclick, row, col)
  9459.              MOUSEPTR ms;
  9460.              int button;
  9461.              int *status, *nclick, *row, *col;
  9462.  
  9463.                   ms      - mouse handle
  9464.                   button  - button of interest (MO_LEFT or MO_RIGHT)
  9465.                   status  - pointer to int to receive status information.
  9466.                               bit 0 set if left button has been pressed 
  9467.                               and released.
  9468.                               bit 1 set if right button has been pressed 
  9469.                               and released.
  9470.                               bit 2 set if center button has been pressed 
  9471.                               and released.
  9472.                   nclick  - pointer to int to receive number of times the 
  9473.                             mouse button specified by button has been 
  9474.                             pressed and released since last call. Zero 
  9475.                             indicates the button has not been released
  9476.                             since the last call.
  9477.                   row     - pointer to int to receive row (0-24) of last 
  9478.                             button release.
  9479.                   col     - pointer to int to receive column (0-79) of 
  9480.                             last button release.
  9481.  
  9482.              Applications level interface function.
  9483.  
  9484.         RETURNS
  9485.  
  9486.              Nothing. 
  9487.  
  9488.              Updates - Members of the mouse control block:
  9489.  
  9490.                ms->bstat  - bit 0 set if left has been released 
  9491.                             bit 1 set if right button has been released
  9492.                             bit 2 set if center button "   "    "
  9493.                ms->nclick - number of times the requested button has been 
  9494.                             pressed and released since last call.
  9495.                ms->row    - mouse pixel row location of last release
  9496.                ms->col    - mouse pixel col location of last release 
  9497.  
  9498.  
  9499.                                                 continued....
  9500.  
  9501.  
  9502.  
  9503.  
  9504.  
  9505.  
  9506.  
  9507.  
  9508.  
  9509.  
  9510.                                                            Page: 155
  9511.                                                      The Window BOSS
  9512.  
  9513.  
  9514.  
  9515.         mo_release - continued.
  9516.  
  9517.  
  9518.  
  9519.         CAUTIONS and ADDITIONAL NOTES
  9520.  
  9521.              Example:
  9522.  
  9523.                   #include "winboss.h"
  9524.                   main()
  9525.                   {
  9526.                   MOUSEPTR ms;
  9527.                   int st, nc, row, col;
  9528.                        ms=mo_reset();           /* init mouse */
  9529.                        if(ms) {
  9530.                                                 /* fetch status */
  9531.                           mo_rcpos(ms, &st, &row, &col);
  9532.                           if(row != 0)          /* home the mouse ?? */
  9533.                             mo_locate(ms, 0, 0);
  9534.                           mo_show(ms);          /* show mouse */
  9535.                           do {                  /* loop till release */
  9536.                             mo_wait(ms);        /* let mouse settle */
  9537.                             mo_release(ms, MO_LEFT, &st, &nc, &row, &col);
  9538.                           } while(!nc); 
  9539.                           mo_hide(ms);          /* hide mouse */
  9540.                           exit(0);              /* finito */
  9541.                        }
  9542.                        else {
  9543.                             ... no mouse
  9544.                        }
  9545.                   }
  9546.                   /* End */
  9547.  
  9548.              Note use of POINTERS.
  9549.  
  9550.              The mouse device driver waits for the user to RELEASE the 
  9551.              specified button before it updates the internal counters.
  9552.  
  9553.              MO_LEFT and MO_RIGHT are defined in "winboss.h"
  9554.  
  9555.              Calling mo_release clears the mouse's pressed button history 
  9556.              counters.
  9557.  
  9558.              Also see "mo_rbinfo", "mo_pbinfo", "mo_press"
  9559.  
  9560.  
  9561.  
  9562.  
  9563.  
  9564.  
  9565.  
  9566.  
  9567.  
  9568.  
  9569.  
  9570.  
  9571.                                                            Page: 156
  9572.                                                      The Window BOSS
  9573.  
  9574.  
  9575.  
  9576.         10.92. mo_reigon -- set mouse region
  9577.  
  9578.         USAGE
  9579.  
  9580.              mo_reigon(ms, row, col, width, height)
  9581.              MOUSEPTR ms;
  9582.              int row, col, width, height;
  9583.  
  9584.                   ms     - mouse pointer
  9585.                   row    - upper left hand corner row
  9586.                   col    - upper left hand corner column
  9587.                   width  - width of region (# of columns 1 to 80)
  9588.                   height - height of region (# of rows 1 to 25)
  9589.  
  9590.              mo_reigon defines the boundaries of where the mouse may 
  9591.              move.  Establishes a fence/cage around the mouse.
  9592.  
  9593.         RETURNS
  9594.  
  9595.              Nothing.
  9596.  
  9597.         CAUTIONS and ADDITIONAL NOTES
  9598.  
  9599.              Example:
  9600.  
  9601.                   #include "winboss.h"
  9602.                   main()
  9603.                   {
  9604.                   MOUSEPTR ms;
  9605.                   int st, nc, row, col;
  9606.                        ms=mo_reset();           /* init mouse */
  9607.                        if(ms) {
  9608.                                                 /* fetch status */
  9609.                           mo_rcpos(ms, &st, &row, &col);
  9610.                           if(row != 0)          /* home the mouse ?? */
  9611.                             mo_locate(ms, 0, 0);
  9612.                           mo_reigon(ms, 0, 0, 40, 12); /* 40x12 */
  9613.                           mo_show(ms);          /* show mouse */
  9614.                           do {                  /* loop till release */
  9615.                             mo_wait(ms);        /* let mouse settle */
  9616.                             mo_release(ms, MO_LEFT, &st, &nc, &row, &col);
  9617.                           } while(!nc); 
  9618.                           mo_hide(ms);          /* hide mouse */
  9619.                           exit(0);              /* finito */
  9620.                        }
  9621.                        else {
  9622.                             ... no mouse
  9623.                        }
  9624.                   }
  9625.                   /* End */
  9626.  
  9627.  
  9628.  
  9629.  
  9630.  
  9631.  
  9632.                                                            Page: 157
  9633.                                                      The Window BOSS
  9634.  
  9635.  
  9636.  
  9637.         10.93. mo_setptr -- set mouse pointer and attributes
  9638.  
  9639.         USAGE
  9640.  
  9641.              mo_setptr(ms, tchar, atrib)
  9642.              MOUSEPTR ms;
  9643.              unsigned int tchar, atrib;
  9644.  
  9645.                   ms    - mouse handle
  9646.                   tchar - character to be used as the mouse cursor, valid 
  9647.                           range is 0 to 255 although a value of 0 makes 
  9648.                           no sense at all!
  9649.                   atrib - attribute to be used.  The attribute byte 
  9650.                           contains the background specific data in the 
  9651.                           upper 4 bits and the foreground specific data 
  9652.                           in the lower 4 bits.  Color and bit definitions 
  9653.                           can be found in winboss.h. You can use a 
  9654.                           statement as follows to set atrib:
  9655.  
  9656.                             atrib = (bground << 4 | fground);
  9657.  
  9658.         RETURNS
  9659.  
  9660.              Nothing.
  9661.  
  9662.         CAUTIONS and ADDITIONAL NOTES
  9663.  
  9664.              To set the mouse cursor to a white happy face on a backgound 
  9665.              use the following:
  9666.  
  9667.                   atrib = BLACK<<4 | WHITE;
  9668.                   mo_setptr(ms, 0x03, atrib);
  9669.  
  9670.              Attributes are defined in winboss.h.
  9671.  
  9672.  
  9673.  
  9674.  
  9675.  
  9676.  
  9677.  
  9678.  
  9679.  
  9680.  
  9681.  
  9682.  
  9683.  
  9684.  
  9685.  
  9686.  
  9687.  
  9688.  
  9689.  
  9690.  
  9691.  
  9692.  
  9693.                                                            Page: 158
  9694.                                                      The Window BOSS
  9695.  
  9696.  
  9697.  
  9698.         10.94. mo_wait -- wait for mouse to settle
  9699.  
  9700.         USAGE
  9701.  
  9702.              mo_wait(ms)
  9703.              MOUSEPTR ms;
  9704.  
  9705.                   ms - mouse handle.
  9706.  
  9707.              Calling mo_wait causes your progam to pause until the mouse 
  9708.              has settled - completely stopped and with its buttons up and 
  9709.              no activity in progress.  
  9710.  
  9711.         RETURNS
  9712.  
  9713.              Nothing.
  9714.  
  9715.         CAUTIONS and ADDITIONAL NOTES
  9716.  
  9717.              Example:
  9718.  
  9719.                   #include "winboss.h"
  9720.                   main()
  9721.                   {
  9722.                   MOUSEPTR ms;
  9723.                   int st, nc, row, col;
  9724.                   unsigned atrib;
  9725.                        ms=mo_reset();           /* init mouse */
  9726.                        if(ms) {                 /* fetch status */
  9727.                           mo_rcpos(ms, &st, &row, &col);
  9728.                           if(row != 0)          /* home the mouse ?? */
  9729.                             mo_locate(ms, 0, 0);
  9730.                           mo_reigon(ms, 0, 0, 40, 12); /* 40x12 */
  9731.                           atrib = BLACK<<4 | WHITE;
  9732.                           mo_setptr(ms, 0x03, atrib);
  9733.                           mo_show(ms);          /* show mouse */
  9734.                           do {                  /* loop till release */
  9735.                             mo_wait(ms);        /* let mouse settle */
  9736.                             mo_release(ms, MO_LEFT, &st, &nc, &row, &col);
  9737.                           } while(!nc); 
  9738.                           mo_hide(ms);          /* hide mouse */
  9739.                           exit(0);              /* finito */
  9740.                        }
  9741.                        else {
  9742.                             ... no mouse
  9743.                        }
  9744.                   }
  9745.                   /* End */
  9746.  
  9747.  
  9748.  
  9749.  
  9750.  
  9751.  
  9752.  
  9753.  
  9754.                                                            Page: 159
  9755.                                                      The Window BOSS
  9756.  
  9757.  
  9758.  
  9759.         10.95. mo_nbutt -- get mouse button count
  9760.  
  9761.         USAGE
  9762.  
  9763.              (int) mo_nbutt(ms)
  9764.              MOUSEPTR ms;
  9765.  
  9766.                   ms - mouse handle
  9767.  
  9768.         RETURNS
  9769.  
  9770.              Number of buttons on mouse.
  9771.  
  9772.         CAUTIONS and ADDITIONAL NOTES
  9773.  
  9774.              None.
  9775.  
  9776.  
  9777.  
  9778.  
  9779.  
  9780.  
  9781.  
  9782.  
  9783.  
  9784.  
  9785.  
  9786.  
  9787.  
  9788.  
  9789.  
  9790.  
  9791.  
  9792.  
  9793.  
  9794.  
  9795.  
  9796.  
  9797.  
  9798.  
  9799.  
  9800.  
  9801.  
  9802.  
  9803.  
  9804.  
  9805.  
  9806.  
  9807.  
  9808.  
  9809.  
  9810.  
  9811.  
  9812.  
  9813.  
  9814.  
  9815.                                                            Page: 160
  9816.                                                      The Window BOSS
  9817.  
  9818.  
  9819.  
  9820.         10.96. _getca -- get character and attribute
  9821.  
  9822.         USAGE
  9823.  
  9824.           unsigned int _getca(page, row, col)
  9825.           int page, row, col;
  9826.  
  9827.  
  9828.                 page - video page #
  9829.                 row -  row value (0-24)
  9830.                 col -  column value (0-79)
  9831.  
  9832.           _getca fetches the character and attribute at the screen 
  9833.           coordinates defined by row and column.  _getca is a general 
  9834.           purpose routine and can be used outside of the window 
  9835.           environment.
  9836.  
  9837.         RETURNS
  9838.  
  9839.           The character and attribute as an unsigned int.  The attribute 
  9840.           is in the upper byte, the character is in the lower byte.
  9841.  
  9842.         CAUTIONS and ADDITIONAL NOTES
  9843.  
  9844.           None.
  9845.  
  9846.  
  9847.  
  9848.         10.97. _putca -- put character and attribute 
  9849.  
  9850.         USAGE
  9851.  
  9852.           _putca(page, atch, row, col);
  9853.           int page, row, col;
  9854.           unsigned atch;
  9855.  
  9856.                 page - video page #
  9857.                 atch - attribute and character
  9858.                          attribute in high order byte
  9859.                          character in low order byte
  9860.                 row -  row position for character (0-24)
  9861.                 col -  column position for character (0-79)
  9862.  
  9863.           _putch is a general purpose routine that can be used outside of 
  9864.           the window environment.
  9865.  
  9866.         RETURNS
  9867.  
  9868.           Nothing.
  9869.  
  9870.         CAUTIONS and ADDITIONAL NOTES
  9871.  
  9872.           None.
  9873.  
  9874.  
  9875.  
  9876.                                                            Page: 161
  9877.                                                      The Window BOSS
  9878.  
  9879.  
  9880.  
  9881.         10.98. _vidblt -- video block transfer
  9882.  
  9883.         USAGE
  9884.  
  9885.           _vidblt(sseg, soff, dseg, doff, n);
  9886.           unsigned sseg, soff, dseg, doff;
  9887.           int n;
  9888.  
  9889.                 sseg - source segment
  9890.                 soff - source offset
  9891.                 dseg - destination segment
  9892.                 doff - destination offset
  9893.                 n -    number of bytes to BLT
  9894.  
  9895.           _vidblt is similar to the lattice movedata() function except 
  9896.           that it waits for the video retrace signal before performing 
  9897.           the block transfer.
  9898.  
  9899.           _vidblt is a general purpose function that can be used outside 
  9900.           of the window environment.
  9901.  
  9902.         RETURNS
  9903.  
  9904.           Nothing
  9905.  
  9906.         CAUTIONS and ADDITIONAL NOTES
  9907.  
  9908.           For use in color systems only.
  9909.  
  9910.           _vidblt references wn_sbit.
  9911.  
  9912.  
  9913.  
  9914.         10.99. v_spage -- set active display page
  9915.  
  9916.         USAGE
  9917.  
  9918.           v_spage(page)
  9919.           int page;
  9920.  
  9921.                 page - video page to switch the display to
  9922.  
  9923.           v_spage is a general purpose routine that can be used outside 
  9924.           of the window environment.  
  9925.  
  9926.         RETURNS
  9927.  
  9928.           Nothing.
  9929.  
  9930.         CAUTIONS and ADDITIONAL NOTES
  9931.  
  9932.           Color card only.
  9933.  
  9934.  
  9935.  
  9936.  
  9937.                                                            Page: 162
  9938.                                                      The Window BOSS
  9939.  
  9940.  
  9941.  
  9942.         10.100. v_cls -- clear entire video screen 
  9943.  
  9944.         USAGE
  9945.  
  9946.           v_cls(atrib)
  9947.           int atrib;
  9948.  
  9949.                 atrib - attribute to be used 
  9950.  
  9951.           v_cls clears the entire video screen to the specified attribute 
  9952.           and places the cursor in the upper left hand corner of the 
  9953.           screen.
  9954.  
  9955.           v_cls is a general purpose routine that can be used outside of 
  9956.           the window environment.
  9957.  
  9958.           Attributes are defined in winboss.h.
  9959.  
  9960.         RETURNS
  9961.  
  9962.           Nothing.
  9963.  
  9964.         CAUTIONS and ADDITIONAL NOTES
  9965.  
  9966.           References Window BOSS globals defined in "winboss.ext".
  9967.  
  9968.  
  9969.  
  9970.         10.101. v_smode -- set video mode
  9971.  
  9972.         USAGE
  9973.  
  9974.           v_smode(mode)
  9975.           int mode;
  9976.  
  9977.                 mode - mode to set the display to
  9978.  
  9979.           v_smode is a general purpose routine which can be used outside 
  9980.           of the window environment.
  9981.  
  9982.           Modes are defined in winboss.h.
  9983.  
  9984.         RETURNS
  9985.  
  9986.           Nothing.
  9987.  
  9988.         CAUTIONS and ADDITIONAL NOTES
  9989.  
  9990.           None.
  9991.  
  9992.  
  9993.  
  9994.  
  9995.  
  9996.  
  9997.  
  9998.                                                            Page: 163
  9999.                                                      The Window BOSS
  10000.  
  10001.  
  10002.  
  10003.         10.102. v_wca -- write character and attribute
  10004.  
  10005.         USAGE
  10006.  
  10007.           v_wca(page, char, atrib, count);
  10008.           int page, char, atrib, count;
  10009.  
  10010.                 page -  video page #
  10011.                 char -  character to write
  10012.                 atrib - attribute to use
  10013.                 count - number of times to repeat
  10014.  
  10015.           v_wca writes the character defined by char count times starting 
  10016.           at the current cursor location.     
  10017.  
  10018.           v_wca is a general purpose routine that can be used outside of 
  10019.           the window environment. 
  10020.  
  10021.           Attributes are defined in winboss.h.
  10022.  
  10023.         RETURNS
  10024.  
  10025.           Nothing.
  10026.  
  10027.         CAUTIONS and ADDITIONAL NOTES
  10028.  
  10029.           None.
  10030.  
  10031.  
  10032.  
  10033.         10.103. v_wtty -- write character TTY mode
  10034.  
  10035.         USAGE
  10036.  
  10037.           v_wtty(char);
  10038.           int  char;
  10039.  
  10040.                 char -  character to write
  10041.  
  10042.         v_wtty writes the character defined by char at the current cursor 
  10043.         location.  
  10044.  
  10045.           v_wtty is a general purpose routine that can be used outside of 
  10046.           the window environment. 
  10047.  
  10048.         RETURNS
  10049.  
  10050.           Nothing.
  10051.  
  10052.         CAUTIONS and ADDITIONAL NOTES
  10053.  
  10054.           None.
  10055.  
  10056.  
  10057.  
  10058.  
  10059.                                                            Page: 164
  10060.                                                      The Window BOSS
  10061.  
  10062.  
  10063.  
  10064.         10.104. v_locate -- locate (position) cursor
  10065.  
  10066.         USAGE
  10067.  
  10068.           v_locate(page, row, col);
  10069.           int page, row, col;
  10070.  
  10071.                 page - video page #
  10072.                 row  - row to position to
  10073.                 col  - column to position to
  10074.           
  10075.           v_locate positions the cursor to the absolute coordinates 
  10076.           specified by row and col on the specified page.  The upper left 
  10077.           hand corner of the screen is (0,0).
  10078.  
  10079.           v_locate is a general purpose routine that can be used outside 
  10080.           of the window environment.
  10081.  
  10082.           Row and Col are range checked.  You CAN position the cursor 
  10083.           slightly (25,80) off the screen.
  10084.  
  10085.         RETURNS
  10086.  
  10087.           Nothing.
  10088.  
  10089.         CAUTIONS and ADDITIONAL NOTES
  10090.  
  10091.           References Window BOSS globals defined in "winboss.ext".
  10092.  
  10093.  
  10094.  
  10095.         10.105. v_hidec -- hide cursor
  10096.  
  10097.         USAGE
  10098.  
  10099.           v_hidec();
  10100.  
  10101.           The physical cursor is located off the screen.
  10102.  
  10103.           This function does not affect any virtual cursor coordinates, 
  10104.           it simply hides the physical cursor from view.
  10105.  
  10106.         RETURNS
  10107.  
  10108.           Nothing.
  10109.  
  10110.         CAUTIONS and ADDITIONAL NOTES
  10111.  
  10112.           References Window BOSS globals defined in "winboss.ext".
  10113.  
  10114.  
  10115.  
  10116.  
  10117.  
  10118.  
  10119.  
  10120.                                                            Page: 165
  10121.                                                      The Window BOSS
  10122.  
  10123.  
  10124.  
  10125.         10.106. v_sctype -- set cursor type (style)
  10126.         10.107. v_gctype -- get cursor type (style)
  10127.  
  10128.         USAGE
  10129.  
  10130.           v_sctype(type, start, end);
  10131.           int type, start, end;
  10132.  
  10133.                 type -  cursor style code 
  10134.                         (0=hidden, 1=normal, 2=slow, 3=fast)
  10135.                 start - start scan line
  10136.                 end -   end scan line
  10137.  
  10138.                   As an example, to set a slow flashing block style 
  10139.                   cursor invoke this function with type=1, start=6, and 
  10140.                   end=12 (color card).
  10141.  
  10142.                        v_sctype(1, 6, 12);
  10143.  
  10144.           v_gctype(page, start, end);
  10145.           int page, *start, *end;                    <- NOTE POINTERS
  10146.              
  10147.                 page -  always 0
  10148.                 start - start scan line
  10149.                 end -   end scan line
  10150.  
  10151.         RETURNS
  10152.  
  10153.           Nothing (v_sctype).
  10154.  
  10155.           Start and end scan line via pointers (v_gctype).
  10156.  
  10157.         CAUTIONS and ADDITIONAL NOTES
  10158.  
  10159.           None.
  10160.  
  10161.  
  10162.  
  10163.  
  10164.  
  10165.  
  10166.  
  10167.  
  10168.  
  10169.  
  10170.  
  10171.  
  10172.  
  10173.  
  10174.  
  10175.  
  10176.  
  10177.  
  10178.  
  10179.  
  10180.  
  10181.                                                            Page: 166
  10182.                                                      The Window BOSS
  10183.  
  10184.  
  10185.  
  10186.         10.108. v_sapu -- scroll active display page up
  10187.  
  10188.         USAGE
  10189.  
  10190.           v_sapu(nl, rul, cul, rlr, clr, atrib);
  10191.           int nl, rul, cul, rlr, clr, atrib;
  10192.  
  10193.                 nl  - number of lines to scroll
  10194.                 rul - row of upper left hand corner of scroll area
  10195.                 cul - column of upper left hand corner of scroll area
  10196.                 rlr - row of lower right corner of scroll area
  10197.                 clr - column of lower right corner of scroll area
  10198.                 atrib - attribute to be used for blanking
  10199.  
  10200.           A value of 0 for nl scrolls (blanks) the entire area.  To clear 
  10201.           the entire video screen use v_sapu(0, 0, 0, 24, 79, NORMAL).
  10202.  
  10203.           v_sapu is a general purpose routine that can be used outside of 
  10204.           the window environment.  
  10205.  
  10206.           Attributes are defined in winboss.h.
  10207.  
  10208.         RETURNS
  10209.  
  10210.           Nothing.
  10211.  
  10212.         CAUTIONS and ADDITIONAL NOTES
  10213.  
  10214.           None.
  10215.  
  10216.  
  10217.  
  10218.  
  10219.  
  10220.  
  10221.  
  10222.  
  10223.  
  10224.  
  10225.  
  10226.  
  10227.  
  10228.  
  10229.  
  10230.  
  10231.  
  10232.  
  10233.  
  10234.  
  10235.  
  10236.  
  10237.  
  10238.  
  10239.  
  10240.  
  10241.  
  10242.                                                            Page: 167
  10243.                                                      The Window BOSS
  10244.  
  10245.  
  10246.  
  10247.         10.109. v_sapd -- scroll active display page down
  10248.  
  10249.         USAGE
  10250.  
  10251.           v_sapd(nl, rul, cul, rlr, clr, atrib);
  10252.           int nl, rul, cul, rlr, clr, atrib;
  10253.  
  10254.                 nl  - number of lines to scroll
  10255.                 rul - row of upper left hand corner of scroll area
  10256.                 cul - column of upper left hand corner of scroll area
  10257.                 rlr - row of lower right corner of scroll area
  10258.                 clr - column of lower right corner of scroll area
  10259.                 atrib - attribute to be used for blanking
  10260.  
  10261.           v_sapd is a general purpose routine that can be used outside of 
  10262.           the window environment.  
  10263.  
  10264.           A value of 0 for nl scrolls (blanks) the entire area.  To clear 
  10265.           the entire video screen use v_sapd(0, 0, 0, 24, 79, NORMAL).
  10266.  
  10267.           Attributes are defined in winboss.h.
  10268.  
  10269.         RETURNS
  10270.  
  10271.           Nothing.
  10272.  
  10273.         CAUTIONS and ADDITIONAL NOTES
  10274.  
  10275.           None.
  10276.  
  10277.  
  10278.         10.110. v_rcpos -- return current cursor position
  10279.  
  10280.         USAGE
  10281.  
  10282.           v_rcpos(page, row, col);
  10283.           int page;
  10284.           int *row, *col;       /* POINTERS */
  10285.  
  10286.                 int page - video page #     
  10287.                 int *row - pointer to int to receive row value
  10288.                 int *col - pointer to int to receive column value
  10289.  
  10290.           v_rcpos is a general purpose routine that can be used outside 
  10291.           of the window environment.  
  10292.  
  10293.         RETURNS
  10294.  
  10295.           Nothing.
  10296.  
  10297.         CAUTIONS and ADDITIONAL NOTES
  10298.  
  10299.           None.
  10300.  
  10301.  
  10302.  
  10303.                                                            Page: 168
  10304.                                                      The Window BOSS
  10305.  
  10306.  
  10307.  
  10308.         10.111. v_rcvs -- return current video state
  10309.  
  10310.         USAGE
  10311.  
  10312.           v_rcvs(page, vm, cols);
  10313.           int *page, *vm, *cols;        /* POINTERS */
  10314.  
  10315.                 int *page - pointer to int to receive current video page #
  10316.                 int *vm   - pointer to int to receive current video mode
  10317.                 int *cols - pointer to int to receive current screen width
  10318.           
  10319.           v_rcvs is a general purpose routine that can be used outside of 
  10320.           the window environment.
  10321.  
  10322.           Modes are defined in winboss.h.
  10323.  
  10324.         RETURNS
  10325.  
  10326.           Nothing.
  10327.  
  10328.         CAUTIONS and ADDITIONAL NOTES
  10329.  
  10330.           None.
  10331.  
  10332.  
  10333.  
  10334.         10.112. v_getch -- get keyboard character and scan code
  10335.  
  10336.         USAGE
  10337.  
  10338.           v_getch();
  10339.  
  10340.           v_getch is a general purpose routine that can be used outside 
  10341.           of the window environment.
  10342.  
  10343.         RETURNS
  10344.  
  10345.           The character and scan code.  The character is in the low order 
  10346.           byte, the scan code in the high order byte.
  10347.  
  10348.         CAUTIONS and ADDITIONAL NOTES
  10349.  
  10350.           v_getch waits for a key to be struck.
  10351.  
  10352.  
  10353.  
  10354.  
  10355.  
  10356.  
  10357.  
  10358.  
  10359.  
  10360.  
  10361.  
  10362.  
  10363.  
  10364.                                                            Page: 169
  10365.                                                      The Window BOSS
  10366.  
  10367.  
  10368.  
  10369.         10.113. v_kstat -- get keyboard status
  10370.  
  10371.         USAGE
  10372.  
  10373.           v_kstat();
  10374.  
  10375.           v_kstat is a general purpose routine that can be used outside 
  10376.           of the window environment.
  10377.  
  10378.         RETURNS
  10379.  
  10380.           TRUE if a character is available, FALSE if not.
  10381.  
  10382.         CAUTIONS and ADDITIONAL NOTES
  10383.  
  10384.           None.
  10385.  
  10386.  
  10387.  
  10388.         10.114. v_kflush -- flush keyboard buffer
  10389.  
  10390.         USAGE
  10391.  
  10392.           v_kflush();
  10393.  
  10394.           v_kflush clears the keyboard buffer of any pending input.
  10395.  
  10396.         RETURNS
  10397.  
  10398.           Nothing.
  10399.  
  10400.         CAUTIONS and ADDITIONAL NOTES
  10401.  
  10402.           None.
  10403.  
  10404.  
  10405.  
  10406.         10.115. v_border -- set border color
  10407.  
  10408.         USAGE
  10409.  
  10410.           v_border(color)
  10411.           int color;
  10412.  
  10413.              Set overscan border to specified color. 
  10414.  
  10415.         RETURNS
  10416.  
  10417.           Nothing.
  10418.  
  10419.         CAUTIONS and ADDITIONAL NOTES
  10420.  
  10421.           None.
  10422.  
  10423.  
  10424.  
  10425.                                                            Page: 170
  10426.                                                      The Window BOSS
  10427.  
  10428.  
  10429.  
  10430.         10.116. v_setatr -- set color attribute
  10431.  
  10432.         USAGE
  10433.  
  10434.           v_setatr(bg, fg, blink, bold)
  10435.           int bg, fg, blink, bold;
  10436.  
  10437.              bg   -    background color
  10438.              fg   -    foreground color
  10439.              bold -    bold flag
  10440.                          BOLD if bold is desired
  10441.                          FALSE or 0 if bold is not desired
  10442.              blink -   blink flag
  10443.                          BLINK if blink is desired
  10444.                          FALSE or 0 if blink is not desired
  10445.  
  10446.         RETURNS
  10447.  
  10448.           Nothing.
  10449.  
  10450.         CAUTIONS and ADDITIONAL NOTES
  10451.  
  10452.           BLINK, BOLD, FALSE, and all colors are defined in winboss.h
  10453.  
  10454.           BLINK and BOLD apply to foreground colors only.  
  10455.  
  10456.           Example:
  10457.  
  10458.              watrib = v_setatr(WHITE,BLUE,0,BOLD);
  10459.              batrib = v_setatr(WHITE,RED,0,BOLD);
  10460.              wn_open(0, 0, 0, 10, 10, watrib, batrib);
  10461.  
  10462.         10.117. v_setrev -- set reverse attribute
  10463.  
  10464.         USAGE
  10465.  
  10466.           v_setrev(atrib)
  10467.           int atrib;
  10468.  
  10469.              atrib   -    current attribute 
  10470.  
  10471.         RETURNS
  10472.  
  10473.           Reverse video of current attribute.
  10474.  
  10475.         CAUTIONS and ADDITIONAL NOTES
  10476.  
  10477.           See wn_popup for example usage.
  10478.  
  10479.  
  10480.  
  10481.  
  10482.  
  10483.  
  10484.  
  10485.  
  10486.                                                            Page: 171
  10487.                                                      The Window BOSS
  10488.  
  10489.  
  10490.  
  10491.         11. Registration Form
  10492.  
  10493.                                 Registration Form
  10494.                             Star Guidance Consulting
  10495.                                  273 Windy Drive 
  10496.                           Waterbury, Connecticut 06705
  10497.                                  (203) 574-2449
  10498.  
  10499.  
  10500.            Company Name:       _______________________________________
  10501.  
  10502.            Name:               _______________________________________
  10503.  
  10504.            Address:            _______________________________________
  10505.  
  10506.                                _______________________________________
  10507.  
  10508.            City, State, Zip:   _______________________________________
  10509.  
  10510.            Country:            _______________________________________
  10511.  
  10512.            Phone:              _______________________________________  
  10513.  
  10514.            Disk Size: ___5.25" 1.2mb,  ___3.5" 1.44mb
  10515.  
  10516.                   ___ Library Source @ $55.00 USD      $________._____
  10517.                   ___ Shareware      @ $20.00 USD      $________._____
  10518.                       Shipping (Outside USA) $6.00 USD $________._____
  10519.                       Shipping (USA)         $5.00 USD $________._____
  10520.                       Connecticut Sales Tax 6.0%       $________._____ *
  10521.                       (Connecticut residents only)  * 
  10522.                                            TOTAL ------>________._____
  10523.  
  10524.            
  10525.            Favorite compiler: Microsoft C,  Microsoft Quick C
  10526.            (Circle one)       Borland Turbo C++, Borland C++
  10527.                               Mix Power C, Watcom C, Zortech C++
  10528.                               Lattice C
  10529.  
  10530.  
  10531.            MasterCard/Visa: ______________________ Exp Date: ____/____
  10532.            (Circle one)
  10533.  
  10534.            Printed Name:    __________________________________________
  10535.            (On Card)
  10536.                    
  10537.            Signature:       ______________________ Date:____/____/____
  10538.            (Of Card Holder)
  10539.  
  10540.            All funds must be in US Dollars, Call for UPS COD (USA only),
  10541.            Personal and Company Checks Accepted. ll checks must be drawn 
  10542.            against a US Bank and payable in US Dollars.
  10543.  
  10544.  
  10545.  
  10546.  
  10547.                                                            Page: 172
  10548.                                                      The Window BOSS
  10549.  
  10550.  
  10551.  
  10552.  
  10553.         A
  10554.         ASMFILES.EXE, 30
  10555.  
  10556.         B
  10557.         Bad Handle Exits, 43
  10558.         Basics
  10559.           Forms, 4
  10560.           Mouse, 19
  10561.           Windows, 4
  10562.         BCPP.EXE, 34
  10563.         BIOS, 45
  10564.         Borland C++, 59
  10565.         Borland Turbo C, 48
  10566.         Borland Turbo C++, 48
  10567.         BOSS_DOC.LZH, 26, 27
  10568.         BOSS_LB1.LZH, 26, 27, 28, 38
  10569.         BOSS_LB2, 29
  10570.         BOSS_LB2.LZH, 26, 27
  10571.         BOSS_LB3, 29
  10572.         BOSS_LB3.LZH, 26, 27
  10573.         BOSS_LB4, 29
  10574.         BOSS_LB4.LZH, 26, 27
  10575.         BOSS_LB5, 29
  10576.         BOSS_LB5.LZH, 27
  10577.         BOSS_LB6, 29
  10578.         BOSS_LB6.LZH, 27
  10579.         BOSS_LB7, 29
  10580.         BOSS_LB7.LZH, 27
  10581.         BOSS_SUP.LZH, 26, 27, 28, 38
  10582.         Bulletin Board
  10583.           Files, 26
  10584.           Support, 26
  10585.  
  10586.         C
  10587.         CFILES.EXE, 30, 31, 32
  10588.         CSM.BAT, 39
  10589.  
  10590.         D
  10591.         Data Entry (Basics), 6
  10592.         DEMO.EXE, 30
  10593.         DOC.EXE, 30
  10594.         dos.mac, 60
  10595.  
  10596.         F
  10597.         fields, 23
  10598.         Fixup Errors, 42
  10599.         FLASH, 45
  10600.         forms, 23
  10601.           closing, 23
  10602.         Forms (Basics), 7
  10603.  
  10604.  
  10605.  
  10606.  
  10607.  
  10608.                                                            Page: 173
  10609.                                                      The Window BOSS
  10610.  
  10611.  
  10612.  
  10613.         G
  10614.         GENINDEX, 14, 15, 17, 131
  10615.         Globals, 45
  10616.  
  10617.         H
  10618.         Help System
  10619.           Basics, 14
  10620.           Notes, 16, 17
  10621.  
  10622.         I
  10623.         INCLUDE Files, 39, 40
  10624.  
  10625.         L
  10626.         Lattice C, 50
  10627.         LC6.EXE, 33
  10628.         LDATA, 60
  10629.         LHARC.DOC, 30
  10630.         LHARC.EXE, 30
  10631.         LHAR_DOC.LZH, 26
  10632.         LPROG, 60
  10633.         LWIN.LIB, 38
  10634.         LZH Files, 26
  10635.  
  10636.         M
  10637.         macros.asm, 60
  10638.         Microsoft C, 46
  10639.         Microsoft Quick C, 46
  10640.         Microsoft Quick C for Windows, 47
  10641.         mitem, 9
  10642.         Mix Power C, 48
  10643.         MIX.EXE, 30, 33
  10644.         model.h, 60
  10645.         Mouse (Basics), 19, 20, 21
  10646.         mo_clim, 143
  10647.         mo_hide, 138
  10648.         mo_locate, 152
  10649.         mo_lpoff, 149
  10650.         mo_lpon, 149
  10651.         mo_motion, 147
  10652.         mo_move, 140
  10653.         mo_nbutt, 160
  10654.         mo_pbinfo, 141
  10655.         mo_pos, 139
  10656.         mo_press, 153
  10657.         mo_ratio, 149
  10658.         mo_rbinfo, 142
  10659.         mo_rcpos, 150
  10660.         mo_reigon, 157
  10661.         mo_release, 155
  10662.         mo_reset, 136
  10663.         mo_rlim, 143
  10664.         mo_scursor, 145
  10665.         mo_setptr, 158
  10666.         mo_sgcursor, 144
  10667.  
  10668.  
  10669.                                                            Page: 174
  10670.                                                      The Window BOSS
  10671.  
  10672.  
  10673.  
  10674.         mo_show, 137
  10675.         mo_task, 148
  10676.         mo_wait, 159
  10677.         MS6.EXE, 30, 35
  10678.         MSQC.EXE, 30
  10679.         MSQC25.EXE, 35
  10680.         msvlib.asm, 60
  10681.         MWIN.MIX, 38
  10682.  
  10683.         O
  10684.         Offset Errors, 42
  10685.  
  10686.         P
  10687.         PAINT, 45
  10688.         pcvlib.asm, 60
  10689.         pmenu, 9, 10, 11
  10690.         Popup Menus (Basics), 8
  10691.  
  10692.         R
  10693.         REVHST.EXE, 30
  10694.  
  10695.         S
  10696.         Shareware Diskette, 26
  10697.         Source Diskette, 26
  10698.         Support, 2
  10699.         Support Services, 2
  10700.         SWIN.LIB, 38
  10701.  
  10702.         T
  10703.         TCPP.EXE, 34
  10704.         tcvlib.asm, 59
  10705.         TopSpeed C, 49, 56
  10706.         TSC.EXE, 30, 37
  10707.         Turbo C++, 59
  10708.  
  10709.         U
  10710.         Unresolved Externals, 42
  10711.  
  10712.         V
  10713.         video attributes, 22
  10714.         vlib.asm, 60
  10715.         v_border, 170
  10716.         v_cls, 163
  10717.         v_gctype, 166
  10718.         v_getch, 169
  10719.         v_hidec, 165
  10720.         v_kflush, 170
  10721.         v_kstat, 170
  10722.         v_locate, 165
  10723.         v_rcpos, 168
  10724.         v_rcvs, 169
  10725.         v_sapd, 168
  10726.         v_sapu, 167
  10727.         v_sctype, 166
  10728.  
  10729.  
  10730.                                                            Page: 175
  10731.                                                      The Window BOSS
  10732.  
  10733.  
  10734.  
  10735.         v_setatr, 171
  10736.         v_setrev, 171
  10737.         v_smode, 163
  10738.         v_spage, 162
  10739.         v_wca, 164
  10740.         v_wtty, 164
  10741.  
  10742.         W
  10743.         Watcom C, 50
  10744.         WATCOM.EXE, 30, 36
  10745.         wcvlib.asm, 60
  10746.         WINBOSS.EXT, 39, 40, 45
  10747.         WINBOSS.FNS, 39, 40
  10748.         WINBOSS.H, 39, 40
  10749.         window handles, 22
  10750.         window origin, 22
  10751.         windows
  10752.           closing, 23
  10753.           overlapping, 24
  10754.           tiled, 24
  10755.         Windows (Basics), 5
  10756.         WINDOWS.C, 45
  10757.         WINDOWS.FN6, 39
  10758.         WINDOWS.FNT, 39
  10759.         WINDOWS.FNZ, 39
  10760.         wns_escape, 45
  10761.         wn_activate, 79
  10762.         wn_boxset, 84
  10763.         wn_close, 70
  10764.         wn_clr, 79
  10765.         wn_color, 80
  10766.         wn_dborder, 85
  10767.         wn_delrow, 78
  10768.         wn_dma, 83
  10769.         wn_dmaflg, 45
  10770.         wn_dmode, 45, 64
  10771.         wn_dtext, 124
  10772.         wn_exit, 63
  10773.         wn_fixcsr, 83
  10774.         wn_frmcls, 93
  10775.         wn_frmget, 92
  10776.         wn_frmopn, 91
  10777.         wn_gatext, 104
  10778.         wn_gbool, 122
  10779.         wn_gdate, 94
  10780.         wn_gdouble, 120
  10781.         wn_gedate, 96
  10782.         wn_getca, 77
  10783.         wn_gets, 75
  10784.         wn_gfloat, 118
  10785.         wn_gint, 110
  10786.         wn_glong, 114
  10787.         wn_gltext, 104
  10788.         wn_gmltext, 106
  10789.  
  10790.  
  10791.                                                            Page: 176
  10792.                                                      The Window BOSS
  10793.  
  10794.  
  10795.  
  10796.         wn_gphone, 100
  10797.         wn_gpword, 108
  10798.         wn_gssn, 102
  10799.         wn_gtext, 104
  10800.         wn_gtime, 98
  10801.         wn_guint, 112
  10802.         wn_gulong, 116
  10803.         wn_gutext, 104
  10804.         wn_help, 132
  10805.         wn_hlinit, 14, 15, 129
  10806.         wn_iemsg, 125
  10807.         wn_ihmsg, 126
  10808.         wn_init, 63
  10809.         wn_input, 86
  10810.         wn_insrow, 78
  10811.         wn_locate, 72
  10812.         wn_move, 71
  10813.         wn_natrib, 84
  10814.         wn_open, 65
  10815.         wn_pmenu, 12
  10816.         wn_popup, 8, 11, 127
  10817.         wn_printf, 73
  10818.         wn_psinit, 63
  10819.         wn_putc, 74
  10820.         wn_putca, 76
  10821.         wn_puts, 74
  10822.         wn_putsa, 76
  10823.         wn_qpopup, 8, 12, 128
  10824.         wn_restore, 71
  10825.         wn_save, 70
  10826.         wn_sbit, 45
  10827.         wn_scenter, 134
  10828.         wn_scroll, 45, 82
  10829.         wn_sdelspc, 135
  10830.         wn_shkey, 86, 87, 126
  10831.         wn_sleftj, 133
  10832.         wn_srightj, 133
  10833.         wn_stitla, 69
  10834.         wn_stitle, 68
  10835.         wn_strndx, 135
  10836.         wn_sync, 81
  10837.         wn_titla, 67
  10838.         wn_title, 67
  10839.         wn_wrap, 81
  10840.  
  10841.         X
  10842.         XMWIN.LIB, 38
  10843.  
  10844.         Z
  10845.         Zortec C, 48
  10846.         Zortech, 50
  10847.         ZTC.EXE, 30, 36
  10848.  
  10849.  
  10850.  
  10851.  
  10852.                                                            Page: 177
  10853.                                                      The Window BOSS
  10854.  
  10855.  
  10856.  
  10857.         _
  10858.         _getca, 161
  10859.         _putca, 161
  10860.         _vidblt, 162
  10861.  
  10862.  
  10863.  
  10864.  
  10865.  
  10866.  
  10867.  
  10868.  
  10869.  
  10870.  
  10871.  
  10872.  
  10873.  
  10874.  
  10875.  
  10876.  
  10877.  
  10878.  
  10879.  
  10880.  
  10881.  
  10882.  
  10883.  
  10884.  
  10885.  
  10886.  
  10887.  
  10888.  
  10889.  
  10890.  
  10891.  
  10892.  
  10893.  
  10894.  
  10895.  
  10896.  
  10897.  
  10898.  
  10899.  
  10900.  
  10901.  
  10902.  
  10903.  
  10904.  
  10905.  
  10906.  
  10907.  
  10908.  
  10909.  
  10910.  
  10911.  
  10912.  
  10913.                                                            Page: 178
  10914.